Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion src/Api/Clients/ProductClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -85,19 +85,20 @@ public async Task<List<Candle>> GetHistoricRatesAsync(string i_product_id, DateT
var CandleData = await this.GetResponseAsync<JArray>(
new ApiRequest(HttpMethod.Get, $"/products/{i_product_id}/candles?start={i_start.ToString("yyyy-MM-ddTHH:mm:00.00000Z")}&end={i_end.ToString("yyyy-MM-ddTHH:mm:00.00000Z")}&granularity={i_granularity.TotalSeconds}")
);
Candle c = new Candle();
List<Candle> cl = new List<Candle>();
JArray x = CandleData.Value;
int index = x.Count;
while (index-- > 0)
{
var c = new Candle();
c.time = (long)x[index][0];
c.low = (decimal)x[index][1];
c.high = (decimal)x[index][2];
c.open = (decimal)x[index][3];
c.close = (decimal)x[index][4];
c.volume = (decimal)x[index][5];
cl.Add(c);
c = null;
}

return cl;
Expand Down
25 changes: 15 additions & 10 deletions src/Api/Clients/RealtimeClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,20 +14,23 @@ namespace Boukenken.Gdax
public interface IRealtimeClient
{
string[] ProductIds { get; }
dynamic[] Channels { get; }
Task SubscribeAsync(Action<string> messageReceived);
}

public class RealtimeClient
{
private Uri _websocketFeedUri;
public RealtimeClient(Uri websocketFeedUri, string[] productIds)

public RealtimeClient(Uri websocketFeedUri, string[] productIds, dynamic[] channels)
{
_websocketFeedUri = websocketFeedUri;
this.ProductIds = productIds;
this.Channels = channels;
}

public string[] ProductIds { get; }
public dynamic[] Channels { get; }

public async Task SubscribeAsync(Action<string> messageReceived)
{
Expand All @@ -38,32 +41,34 @@ public async Task SubscribeAsync(Action<string> messageReceived)
var cancellationToken = new CancellationToken();
await webSocketClient.ConnectAsync(_websocketFeedUri, cancellationToken).ConfigureAwait(false);


if (webSocketClient.State == WebSocketState.Open)
{
var requestString = JsonConvert.SerializeObject(new {
var requestString = JsonConvert.SerializeObject(new
{
type = "subscribe",
product_ids = ProductIds
product_ids = ProductIds,
channels = Channels
});

var requestBytes = UTF8Encoding.UTF8.GetBytes(requestString);
var requestBytes = Encoding.UTF8.GetBytes(requestString);
var subscribeRequest = new ArraySegment<byte>(requestBytes);
var sendCancellationToken = new CancellationToken();
await webSocketClient.SendAsync(subscribeRequest, WebSocketMessageType.Text, true, sendCancellationToken).ConfigureAwait(false);

while (webSocketClient.State == WebSocketState.Open)
{
var receiveCancellationToken = new CancellationToken();
using(var stream = new MemoryStream(1024))
using (var stream = new MemoryStream(1024))
{
var receiveBuffer = new ArraySegment<byte>(new byte[1024*8]);
var receiveBuffer = new ArraySegment<byte>(new byte[1024 * 8]);
WebSocketReceiveResult webSocketReceiveResult;
do
{
webSocketReceiveResult = await webSocketClient.ReceiveAsync(receiveBuffer, receiveCancellationToken).ConfigureAwait(false);
await stream.WriteAsync(receiveBuffer.Array, receiveBuffer.Offset, receiveBuffer.Count);
} while(!webSocketReceiveResult.EndOfMessage);
} while (!webSocketReceiveResult.EndOfMessage);

var message = stream.ToArray().Where(b => b != 0).ToArray();
messageReceived(Encoding.ASCII.GetString(message, 0, message.Length));
}
Expand Down
15 changes: 5 additions & 10 deletions src/gdax.netcore.csproj
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,17 @@
<TargetFramework>netstandard1.6</TargetFramework>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json">
<Version>10.0.2</Version>
<PackageReference Include="Newtonsoft.Json" Version="10.0.2">
</PackageReference>
<PackageReference Include="System.Collections">
<Version>4.3.0</Version>
<PackageReference Include="System.Collections" Version="4.3.0">
</PackageReference>
<PackageReference Include="System.Linq">
<Version>4.3.0</Version>
<PackageReference Include="System.Linq" Version="4.3.0">
</PackageReference>
<PackageReference Include="System.Net.Http">
<Version>4.3.1</Version>
<PackageReference Include="System.Net.Http" Version="4.3.1">
</PackageReference>
<PackageReference Include="System.Net.WebSockets.Client" Version="4.3.0" />
<PackageReference Include="System.Reactive" Version="3.1.1" />
<PackageReference Include="System.Runtime">
<Version>4.3.0</Version>
<PackageReference Include="System.Runtime" Version="4.3.0">
</PackageReference>
</ItemGroup>
</Project>