using CommonLang.ByteOrder; using CommonLang.Net; using SuperSocket.Facility.Protocol; using SuperSocket.SocketBase; using SuperSocket.SocketBase.Command; using SuperSocket.SocketBase.Protocol; using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace CommonServer.SSocket.SuperSocket { public class MessageReceiveFilterFactory : IReceiveFilterFactory<BinaryRequestInfo> { public MessageReceiveFilterFactory(INetPackageCodec codec) { } public IReceiveFilter<BinaryRequestInfo> CreateFilter(IAppServer appServer, IAppSession appSession, System.Net.IPEndPoint remoteEndPoint) { return new MessageReceiveFilter(appServer, appSession as Session); } } public class MessageReceiveFilter : FixedHeaderReceiveFilter<BinaryRequestInfo> { public MessageReceiveFilter(IAppServer appServer, Session appSession) : base(4) { } protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) { int pos = offset; int bodyLength = LittleEdian.GetS32(header, ref pos); return bodyLength; } protected override BinaryRequestInfo ResolveRequestInfo(ArraySegment<byte> header, byte[] bodyBuffer, int offset, int length) { byte[] bin = new byte[length]; Buffer.BlockCopy(bodyBuffer, offset, bin, 0, length); return new BinaryRequestInfo("BinCommand", bin); } } }