public void Decode(ISession session, Stream stream) { PipeStream pstream = stream.ToPipeStream(); Start: object data; HandshakeStatus handshakeStatus = mServer.SessionStatus[session.ID]; switch (handshakeStatus) { #region 握手 case HandshakeStatus.RTMP_HANDSHAKE_0: if (pstream.Length < 1537) { return; } data = OnC0C1Reader(session, pstream); Completed?.Invoke(this, mCompletedArgs.SetInfo(session, data)); break; case HandshakeStatus.RTMP_HANDSHAKE_1: data = OnC2Reader(session, pstream); Completed?.Invoke(this, mCompletedArgs.SetInfo(session, data)); break; case HandshakeStatus.RTMP_HANDSHAKE_2: #endregion default: break; } goto Start; }
internal HandshakeDecoder( IPlayerController playerController, ISessionController sessionController) { _playerController = playerController; _sessionController = sessionController; status = HandshakeStatus.Handshake; }
private async Task DecodeHandshake(IChannelHandlerContext context, IByteBuffer input, List <object> output) { if (input.ReadableBytes < 2) { return; } int request = input.ReadUByte(); if (request != 14) { await context.CloseAsync(); return; } int nameHash = input.ReadUByte(); await context.WriteAndFlushAsync(new ConnectionSuccessComposer().Buffer); status = HandshakeStatus.Login; }