From 4accb0daab61b63b57ee014ea0c6c7bcf4937674 Mon Sep 17 00:00:00 2001 From: JKorf Date: Sun, 11 Jan 2026 20:17:26 +0100 Subject: [PATCH] wip --- CryptoExchange.Net/Interfaces/ISymbolOrderBook.cs | 2 ++ CryptoExchange.Net/OrderBook/SymbolOrderBook.cs | 13 +++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/CryptoExchange.Net/Interfaces/ISymbolOrderBook.cs b/CryptoExchange.Net/Interfaces/ISymbolOrderBook.cs index 0b94d6a..45e7a7b 100644 --- a/CryptoExchange.Net/Interfaces/ISymbolOrderBook.cs +++ b/CryptoExchange.Net/Interfaces/ISymbolOrderBook.cs @@ -10,6 +10,8 @@ namespace CryptoExchange.Net.Interfaces /// public interface ISymbolOrderBook { + Task ReconnectAsync(); + /// /// The exchange the book is for /// diff --git a/CryptoExchange.Net/OrderBook/SymbolOrderBook.cs b/CryptoExchange.Net/OrderBook/SymbolOrderBook.cs index 6e9efd3..dc26599 100644 --- a/CryptoExchange.Net/OrderBook/SymbolOrderBook.cs +++ b/CryptoExchange.Net/OrderBook/SymbolOrderBook.cs @@ -39,6 +39,7 @@ namespace CryptoExchange.Net.OrderBook private readonly AsyncResetEvent _queueEvent; private readonly ConcurrentQueue _processQueue; private bool _validateChecksum; + private bool _firstUpdateAfterSnapshotDone; private class EmptySymbolOrderBookEntry : ISymbolOrderBookEntry { @@ -85,8 +86,10 @@ namespace CryptoExchange.Net.OrderBook /// protected bool _sequencesAreConsecutive; + /// + /// Whether the first update message after a snapshot may have overlapping sequence numbers instead of the snapshot sequence number + 1 + /// protected bool _skipSequenceCheckFirstUpdateAfterSnapshotSet; - private bool _firstUpdateAfterSnapshotDone; /// /// Whether levels should be strictly enforced. For example, when an order book has 25 levels and a new update comes in which pushes @@ -325,6 +328,11 @@ namespace CryptoExchange.Net.OrderBook await ResyncAsync().ConfigureAwait(false); } + public async Task ReconnectAsync() + { + _subscription.ReconnectAsync(); + } + /// public async Task StopAsync() { @@ -989,7 +997,7 @@ namespace CryptoExchange.Net.OrderBook if (_sequencesAreConsecutive && startSequenceNumber != LastSequenceNumber + 1) { if (_firstUpdateAfterSnapshotDone || !_skipSequenceCheckFirstUpdateAfterSnapshotSet) - // Buffered update is not the next sequence number when it was expected + // Buffered update is not the next sequence number when it was expected to be return SequenceNumberResult.OutOfSync; } @@ -1000,6 +1008,7 @@ namespace CryptoExchange.Net.OrderBook private SequenceNumberResult ValidateLiveSequenceNumber(long sequenceNumber) { if (sequenceNumber < LastSequenceNumber) + // Update is somehow from before the current state return SequenceNumberResult.OutOfSync; if (_sequencesAreConsecutive