示例#1
0
        public void DoEvents()
        {
            _connection.DoEvents();

            _connection.TryDequeue((sequence) =>
            {
                if (!Varint.TryGetUInt64(sequence, out var type, out var comsumed))
                {
                    throw new FormatException();
                }

                sequence = sequence.Slice(comsumed);

                switch ((PacketType)type)
                {
                case PacketType.Connect:
                    this.ReceiveSessionConnectMessageEvent.Invoke(SessionConnectMessage.Import(sequence, _bufferPool));
                    break;

                case PacketType.Accept:
                    this.ReceiveSessionAcceptMessageEvent.Invoke(SessionAcceptMessage.Import(sequence, _bufferPool));
                    break;

                case PacketType.UpdateWindowSize:
                    this.ReceiveSessionUpdateWindowSizeMessageEvent.Invoke(SessionUpdateWindowSizeMessage.Import(sequence, _bufferPool));
                    break;

                case PacketType.Data:
                    this.ReceiveSessionDataMessageEvent.Invoke(SessionDataMessage.Import(sequence, _bufferPool));
                    break;

                case PacketType.Close:
                    this.ReceiveSessionCloseMessageEvent.Invoke(SessionCloseMessage.Import(sequence, _bufferPool));
                    break;

                case PacketType.Error:
                    this.ReceiveSessionErrorMessageEvent.Invoke(SessionErrorMessage.Import(sequence, _bufferPool));
                    break;
                }
            });
        }