Skip to content
Merged
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
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ internal partial class CoinbaseSocketClientAdvancedTradeApi : SocketApiClient, I
internal CoinbaseSocketClientAdvancedTradeApi(ILogger logger, CoinbaseSocketOptions options) :
base(logger, options.Environment.SocketClientPublicAddress!, options, options.AdvancedTradeOptions)
{
EnforceSequenceNumbers = true;
}
#endregion

Expand Down Expand Up @@ -76,6 +77,7 @@ public async Task<CallResult<UpdateSubscription>> SubscribeToHeartbeatUpdatesAsy
.WithUpdateType(eventType)
.WithStreamId(data.Channel)
.WithDataTimestamp(data.Timestamp, GetTimeOffset())
.WithSequenceNumber(data.SequenceNumber)
);
});

Expand Down Expand Up @@ -106,6 +108,7 @@ public async Task<CallResult<UpdateSubscription>> SubscribeToTradeUpdatesAsync(I
.WithStreamId(data.Channel)
.WithSymbol(data.Events.First().Trades.First().Symbol)
.WithDataTimestamp(data.Timestamp, GetTimeOffset())
.WithSequenceNumber(data.SequenceNumber)
);
});

Expand All @@ -132,6 +135,7 @@ public async Task<CallResult<UpdateSubscription>> SubscribeToKlineUpdatesAsync(I
.WithStreamId(data.Channel)
.WithSymbol(data.Events.First().Klines.First().Symbol)
.WithDataTimestamp(data.Timestamp, GetTimeOffset())
.WithSequenceNumber(data.SequenceNumber)
);
});

Expand All @@ -158,6 +162,7 @@ public async Task<CallResult<UpdateSubscription>> SubscribeToTickerUpdatesAsync(
.WithStreamId(data.Channel)
.WithSymbol(data.Events.First().Tickers.First().Symbol)
.WithDataTimestamp(data.Timestamp, GetTimeOffset())
.WithSequenceNumber(data.SequenceNumber)
);
});

Expand All @@ -184,6 +189,7 @@ public async Task<CallResult<UpdateSubscription>> SubscribeToBatchedTickerUpdate
.WithStreamId(data.Channel)
.WithSymbol(data.Events.First().Tickers.First().Symbol)
.WithDataTimestamp(data.Timestamp, GetTimeOffset())
.WithSequenceNumber(data.SequenceNumber)
);
});

Expand All @@ -210,6 +216,7 @@ public async Task<CallResult<UpdateSubscription>> SubscribeToSymbolUpdatesAsync(
.WithStreamId(data.Channel)
.WithSymbol(data.Events.First().Symbols.First().Symbol)
.WithDataTimestamp(data.Timestamp, GetTimeOffset())
.WithSequenceNumber(data.SequenceNumber)
);
});

Expand Down Expand Up @@ -246,6 +253,7 @@ public async Task<CallResult<UpdateSubscription>> SubscribeToOrderBookUpdatesAsy
.WithStreamId(data.Channel)
.WithSymbol(data.Events.First().Symbol)
.WithDataTimestamp(data.Timestamp, GetTimeOffset())
.WithSequenceNumber(data.SequenceNumber)
);
});

Expand All @@ -267,6 +275,7 @@ public async Task<CallResult<UpdateSubscription>> SubscribeToUserUpdatesAsync(Ac
.WithUpdateType(eventType)
.WithStreamId(data.Channel)
.WithDataTimestamp(data.Timestamp, GetTimeOffset())
.WithSequenceNumber(data.SequenceNumber)
);
});

Expand All @@ -288,6 +297,7 @@ public async Task<CallResult<UpdateSubscription>> SubscribeToFuturesBalanceUpdat
.WithUpdateType(eventType)
.WithStreamId(data.Channel)
.WithDataTimestamp(data.Timestamp, GetTimeOffset())
.WithSequenceNumber(data.SequenceNumber)
);
});

Expand Down
2 changes: 1 addition & 1 deletion Coinbase.Net/Coinbase.Net.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,11 @@
<None Include="..\README.md" Pack="true" PackagePath="\" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="CryptoExchange.Net" Version="10.1.0" />
<PackageReference Include="ConfigureAwaitChecker.Analyzer" Version="5.0.0.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="CryptoExchange.Net" Version="10.2.0" />
<PackageReference Include="Microsoft.CodeAnalysis.NetAnalyzers" Version="10.0.101">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
Expand Down
11 changes: 11 additions & 0 deletions Coinbase.Net/Objects/Sockets/CoinbaseQuery.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
using CryptoExchange.Net.Sockets;
using Coinbase.Net.Objects.Internal;
using CryptoExchange.Net.Objects;
using CryptoExchange.Net.Sockets.Default;
using System;

namespace Coinbase.Net.Objects.Sockets
{
Expand All @@ -10,5 +13,13 @@ public CoinbaseQuery(CoinbaseSocketRequest request, bool authenticated, int weig
MessageMatcher = MessageMatcher.Create<T>("subscriptions");
MessageRouter = MessageRouter.CreateWithoutHandler<T>("subscriptions");
}

public CallResult<CoinbaseSocketMessage<CoinbaseSubscriptionsUpdate>>? HandleMessage(SocketConnection connection, DateTime receiveTime, string? originalData, CoinbaseSocketMessage<CoinbaseSubscriptionsUpdate> message)
{
if (message.SequenceNumber != 0)
connection.UpdateSequenceNumber(message.SequenceNumber);

return new CallResult<CoinbaseSocketMessage<CoinbaseSubscriptionsUpdate>>(message, originalData, null);
}
}
}
3 changes: 3 additions & 0 deletions Coinbase.Net/Objects/Sockets/CoinbaseSubscriptionQuery.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ public override bool PreCheckMessage(SocketConnection connection, object message

public CallResult<CoinbaseSocketMessage<CoinbaseSubscriptionsUpdate>>? HandleMessage(SocketConnection connection, DateTime receiveTime, string? originalData, CoinbaseSocketMessage<CoinbaseSubscriptionsUpdate> message)
{
if (message.SequenceNumber != 0)
connection.UpdateSequenceNumber(message.SequenceNumber);

var evnt = message.Events.First();
if (!evnt.Subscriptions.TryGetValue(_channel, out var subbed))
return null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,9 @@ public CoinbaseSubscription(SocketApiClient client, ILogger logger, string chann
/// <inheritdoc />
public CallResult DoHandleMessage(SocketConnection connection, DateTime receiveTime, string? originalData, CoinbaseSocketMessage<T> message)
{
if (message.SequenceNumber != 0)
connection.UpdateSequenceNumber(message.SequenceNumber);

_handler.Invoke(receiveTime, originalData, message);
return CallResult.SuccessResult;
}
Expand Down
9 changes: 3 additions & 6 deletions Coinbase.Net/SymbolOrderBooks/CoinbaseSymbolOrderBook.cs
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ public CoinbaseSymbolOrderBook(

_strictLevels = false;

_sequencesAreConsecutive = false; // Sequence numbers are on connection level, not order book
_initialDataTimeout = options?.InitialDataTimeout ?? TimeSpan.FromSeconds(30);
_clientOwner = socketClient == null;
_socketClient = socketClient ?? new CoinbaseSocketClient();
Expand Down Expand Up @@ -81,13 +82,9 @@ private void ProcessUpdate(DataEvent<CoinbaseOrderBookUpdate> data)
{
var entries = data.Data;
if (data.UpdateType == SocketUpdateType.Snapshot)
{
SetInitialOrderBook(DateTime.UtcNow.Ticks, data.Data.Bids, data.Data.Asks, data.DataTime, data.DataTimeLocal);
}
SetSnapshot(data.SequenceNumber!.Value, data.Data.Bids, data.Data.Asks, data.DataTime, data.DataTimeLocal);
else
{
UpdateOrderBook(DateTime.UtcNow.Ticks, data.Data.Bids, data.Data.Asks, data.DataTime, data.DataTimeLocal);
}
UpdateOrderBook(data.SequenceNumber!.Value, data.Data.Bids, data.Data.Asks, data.DataTime, data.DataTimeLocal);
}

/// <inheritdoc />
Expand Down
Loading