Exemplo n.º 1
0
 private void Messenger_MessageReceived(object sender, WebsocketReceiveEventArgs e)
 {
     try
     {
         // TODO: type is response, not command
         var response = Responseo.Parse(e.Message);
         if (response.Sequence == 0)
         {
             // TODO: message type
             Broadcast?.Invoke(this, EventArgs.Empty);
         }
         else
         {
             if (commandCompletionSources.TryRemove(response.Sequence, out var tcs))
             {
                 // TODO: outcome
                 tcs.TrySetResult(response);
             }
             else
             {
                 // TODO: desync? throw?
             }
         }
     }
     catch (FormatException)
     {
         MessageError?.Invoke(this, EventArgs.Empty);
     }
 }
Exemplo n.º 2
0
        async Task ReceiveLoop()
        {
            while (!tokenSource.IsCancellationRequested)
            {
                var nextMessage = await socket.ReceiveAsync(new ArraySegment <byte>(receiveBuffer), tokenSource.Token);

                var messageEventArgs = new WebsocketReceiveEventArgs(encoding.GetString(receiveBuffer, 0, nextMessage.Count));
                messageEventSource.SendOrBuffer(this, messageEventArgs);
                if (nextMessage.CloseStatus.HasValue)
                {
                    tokenSource.Cancel();
                }
            }
        }