コード例 #1
0
ファイル: RtmpServerPacket.cs プロジェクト: Nokecy/RTMSTest
        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;
        }
コード例 #2
0
        internal HandshakeDecoder(
            IPlayerController playerController,
            ISessionController sessionController)
        {
            _playerController  = playerController;
            _sessionController = sessionController;

            status = HandshakeStatus.Handshake;
        }
コード例 #3
0
        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;
        }