コード例 #1
0
        public bool HandlePacket(SocketAsyncEventArgs ioEventArgs, PacketStreamer streamer)
        {
            var dataToken = (DataToken)ioEventArgs.UserToken;
            var offset    = ioEventArgs.Offset;
            var count     = ioEventArgs.BytesTransferred;

            do
            {
                if (!dataToken.IsPrefixReady)
                {
                    HandlePrefix(dataToken, ioEventArgs.Buffer, ref offset, ref count);
                    if (dataToken.IsPrefixReady && (dataToken.MessageLength > DataToken.MaxMessageLength || dataToken.MessageLength <= 0))
                    {
                        return(false);
                    }
                    if (count == 0)
                    {
                        break;
                    }
                }

                HandleBody(dataToken, ioEventArgs.Buffer, ref offset, ref count);
                if (dataToken.IsMessageReady)
                {
                    streamer.Enqueue(dataToken.ByteArrayForMessage);
                    dataToken.Reset();
                }
            } while (count > 0);
            return(true);
        }
コード例 #2
0
        public bool HandlePacket(SocketAsyncEventArgs ioEventArgs, PacketStreamer streamer)
        {
            var length = ioEventArgs.BytesTransferred;
            var bytes  = new byte[length];

            Array.Copy(ioEventArgs.Buffer, ioEventArgs.Offset, bytes, 0, length);
            streamer.Enqueue(bytes);
            return(true);
        }