public async Task <WebSocketResponse> GetStatusesAsync(int millisecondsTimeout) { WebSocketResponse response = null; var seq = NextSeq(); var msg = new WebSocketRequest { Action = "get_statuses", Seq = seq, }; using var sem = new SemaphoreSlim(0); void OnWebSocketResponseAction(WebSocketResponse r) { if (r.SeqReply != seq) { return; } response = r; // ReSharper disable once AccessToDisposedClosure - its not true! sem.Release(); } OnWebSocketResponse += OnWebSocketResponseAction; await SendAsync(Serialize(msg)); await sem.WaitAsync(millisecondsTimeout, _cancellationToken); OnWebSocketResponse -= OnWebSocketResponseAction; return(response); }
public async Task Authenticate(string token) { var msg = new WebSocketRequest { Action = "authentication_challenge", Data = new WebSocketRequestData { Token = token }, Seq = NextSeq(), }; await SendAsync(Serialize(msg)); }