public override void PacketReceived(ISessionFilterChain filterChain, IPacket packet) { if (packet == null || filterChain.Session != base._session) { base.PacketReceived(filterChain, packet); } else { lock (this) { if (_content == null) { _content = packet.Buffer; _endPoint = packet.EndPoint; } else { IBuffer content = packet.Buffer; if (_content.Remaining < content.Remaining) { IBuffer buffer = BufferFactory.GetBuffer( _content.Position + content.Remaining); buffer.Put(_content.Flip()); _content.Release(); _content = buffer; } _content.Put(content); _content.Flip(); } if (_content != null) { try { base.Recognize(_content, _endPoint); } finally { if (_content.HasRemaining) { _content.Compact(); } else { _content.Release(); _content = null; _endPoint = null; } } } } } }
public static IBuffer ToBuffer(DefaultMessage message, Func <object, byte[]> messageBodyEncoder) { byte[] data = messageBodyEncoder(message.Obj); IBuffer buffer = BufferFactory.GetBuffer(data.Length + DefaultMessageHeader.HeaderLength); message.Header.Length = data.Length; message.Header.Write(buffer); System.Buffer.BlockCopy(data, 0, buffer.ByteArray, DefaultMessageHeader.HeaderLength, data.Length); return(buffer); }
protected virtual IPacket DoProcessReceive(SocketAsyncEventArgs args) { if (!base.IsOpened) { return(null); } if (!CheckSendOrReceiveSuccess(args)) { Close(); return(null); } int receiveCount = args.BytesTransferred; IBuffer buffer = BufferFactory.GetBuffer(receiveCount); System.Buffer.BlockCopy(args.Buffer, args.Offset, buffer.ByteArray, 0, receiveCount); return(new DefaultPacket(buffer, RemoteEndPoint)); }