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

SendMessage() protected method

protected SendMessage ( int chunk_stream_id, RTMPMessage msg, CancellationToken cancel_token ) : Task
chunk_stream_id int
msg RTMPMessage
cancel_token System.Threading.CancellationToken
return Task
    protected async Task SendMessage(int chunk_stream_id, RTMPMessage msg, CancellationToken cancel_token)
    {
      int offset = 0;
      int fmt = 0;
      while (msg.Body.Length-offset>0) {
        switch (fmt) {
        case 0:
          await SendAsync(writer => {
            writer.Write((byte)((fmt<<6) | chunk_stream_id));
            if (msg.Timestamp>0xFFFFFF) {
              writer.WriteUInt24(0xFFFFFF);
            }
            else {
              writer.WriteUInt24((int)msg.Timestamp);
            }
            writer.WriteUInt24(msg.Body.Length);
            writer.Write((byte)msg.MessageType);
            writer.WriteUInt32LE(msg.StreamId);
            if (msg.Timestamp>0xFFFFFF) {
              writer.WriteUInt32(msg.Timestamp);
            }
            int chunk_len = Math.Min(sendChunkSize, msg.Body.Length-offset);
            writer.Write(msg.Body, offset, chunk_len);
            offset += chunk_len;
          }, cancel_token);
          fmt = 3;
          break;
        case 3:
          await SendAsync(writer => {
            writer.Write((byte)((fmt<<6) | chunk_stream_id));
            int chunk_len = Math.Min(sendChunkSize, msg.Body.Length-offset);
            writer.Write(msg.Body, offset, chunk_len);
            offset += chunk_len;
          }, cancel_token);
          break;
        }
      }
    }