예제 #1
0
        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);
        }
예제 #2
0
        public async Task Authenticate(string token)
        {
            var msg = new WebSocketRequest {
                Action = "authentication_challenge",
                Data   = new WebSocketRequestData {
                    Token = token
                },
                Seq = NextSeq(),
            };

            await SendAsync(Serialize(msg));
        }