1
0
mirror of https://github.com/JKorf/CryptoExchange.Net synced 2026-02-16 14:13:46 +00:00

Compare commits

...

2 Commits

2 changed files with 36 additions and 6 deletions

View File

@ -643,19 +643,20 @@ namespace CryptoExchange.Net.OrderBook
/// <summary> /// <summary>
/// Wait until an update has been buffered /// Wait until an update has been buffered
/// </summary> /// </summary>
/// <param name="timeout">Max wait time</param> /// <param name="minWait">Min wait time</param>
/// <param name="maxWait">Max wait time</param>
/// <param name="ct">Cancellation token</param> /// <param name="ct">Cancellation token</param>
/// <returns></returns> /// <returns></returns>
protected async Task<CallResult<bool>> WaitUntilFirstUpdateBufferedAsync(TimeSpan timeout, CancellationToken ct) protected async Task<CallResult> WaitUntilFirstUpdateBufferedAsync(TimeSpan? minWait, TimeSpan maxWait, CancellationToken ct)
{ {
var startWait = DateTime.UtcNow; var startWait = DateTime.UtcNow;
while (_processBuffer.Count == 0) while (_processBuffer.Count == 0)
{ {
if (ct.IsCancellationRequested) if (ct.IsCancellationRequested)
return new CallResult<bool>(new CancellationRequestedError()); return new CallResult(new CancellationRequestedError());
if (DateTime.UtcNow - startWait > timeout) if (DateTime.UtcNow - startWait > maxWait)
return new CallResult<bool>(new ServerError(new ErrorInfo(ErrorType.OrderBookTimeout, "Timeout while waiting for data"))); return new CallResult(new ServerError(new ErrorInfo(ErrorType.OrderBookTimeout, "Timeout while waiting for data")));
try try
{ {
@ -665,7 +666,14 @@ namespace CryptoExchange.Net.OrderBook
{ } { }
} }
return new CallResult<bool>(true); if (minWait != null)
{
var dif = DateTime.UtcNow - startWait;
if (dif < minWait)
await Task.Delay(minWait.Value - dif).ConfigureAwait(false);
}
return CallResult.SuccessResult;
} }
/// <summary> /// <summary>

View File

@ -1,5 +1,7 @@
using System; using System;
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -139,6 +141,26 @@ namespace CryptoExchange.Net
/// <param name="api">API name</param> /// <param name="api">API name</param>
public static TimeSpan? GetSocketOffset(string api) => _lastSocketDelays.TryGetValue(api, out var val) && val.Offset != null ? TimeSpan.FromMilliseconds(val.Offset.Value) : null; public static TimeSpan? GetSocketOffset(string api) => _lastSocketDelays.TryGetValue(api, out var val) && val.Offset != null ? TimeSpan.FromMilliseconds(val.Offset.Value) : null;
/// <summary>
/// Get a dictionary of API/Client name -> time offset for Rest api's
/// </summary>
public static Dictionary<string, TimeSpan?> GetRestOffsets()
{
return _lastRestDelays.ToDictionary(
x => x.Key,
x => (x.Value.Offset == null ? (TimeSpan?)null : TimeSpan.FromMilliseconds(x.Value.Offset.Value)));
}
/// <summary>
/// Get a dictionary of API/Client name -> time offset for Websocket api's
/// </summary>
public static Dictionary<string, TimeSpan?> GetWebsocketOffsets()
{
return _lastSocketDelays.ToDictionary(
x => x.Key,
x => (x.Value.Offset == null ? (TimeSpan?)null : TimeSpan.FromMilliseconds(x.Value.Offset.Value)));
}
/// <summary> /// <summary>
/// Reset the WebSocket API update timestamp to trigger a new time offset calculation /// Reset the WebSocket API update timestamp to trigger a new time offset calculation
/// </summary> /// </summary>