PeerCastStation.FLV.RTMP.RTMPConnection.RecvAndProcessMessages C# (CSharp) Method

RecvAndProcessMessages() protected method

protected RecvAndProcessMessages ( CancellationToken cancel_token ) : Task
cancel_token System.Threading.CancellationToken
return Task
    protected async Task RecvAndProcessMessages(CancellationToken cancel_token)
    {
      var local_cancel = new CancellationTokenSource();
      cancel_token.Register(() => local_cancel.Cancel());
      var recv_message_task = Task.Run(async () => {
        while (!local_cancel.IsCancellationRequested) {
          await RecvMessage(messageQueue, local_cancel.Token);
        }
      }).ContinueWith(prev => {
        local_cancel.Cancel();
      });
      while (!local_cancel.IsCancellationRequested) {
        var msg = await messageQueue.DequeueAsync(local_cancel.Token);
        switch (msg.Direction) {
        case QueuedMessage.MessageDirection.In:
          await ProcessMessage(msg.Message, local_cancel.Token);
          FlushBuffer();
          break;
        case QueuedMessage.MessageDirection.Out:
          await SendMessage(msg.ChunkStreamId, msg.Message, local_cancel.Token);
          break;
        }
      }
      await recv_message_task;
    }