protected override int GetBodyLengthFromHeader(IBufferStream bufferStream, int length) { bufferStream.Skip(FixedHeaderTryConst.KEYSIZE); byte[] bodySizeBuf = new byte[FixedHeaderTryConst.BODYSIZE_LEN]; //注意 Read方法的第二个参数,目标数组的偏移 bufferStream.Read(bodySizeBuf, 0, FixedHeaderTryConst.BODYSIZE_LEN); return(PackageBodyOperator.GetBodyLen(bodySizeBuf)); //throw new NotImplementedException(); }
public override StringPackageInfo ResolvePackage(IBufferStream bufferStream) { //throw new NotImplementedException(); string key = bufferStream.ReadString(FixedHeaderTryConst.KEYSIZE, Encoding.UTF8); byte[] buffer = new byte[FixedHeaderTryConst.BODYSIZE_LEN]; bufferStream.Read(buffer, 0, FixedHeaderTryConst.BODYSIZE_LEN); int bodySize = PackageBodyOperator.GetBodyLen(buffer); string body = bufferStream.ReadString(bodySize, Encoding.UTF8); return(new StringPackageInfo(key, body, null)); }
public static ArraySegment <byte> CreatePackage(string key, string body) { byte[] buffer = new byte[FixedHeaderTryConst.HEARSIZE + body.Length]; Buffer.BlockCopy(Encoding.UTF8.GetBytes(key), 0, buffer, 0, key.Length); /* * buffer[FixedHeaderTryConst.KEYSIZE] = (byte)(body.Length / ConstValues._16MaxValue); * buffer[FixedHeaderTryConst.KEYSIZE + 1] = (byte)((body.Length % ConstValues._16MaxValue) / ConstValues._8MaxValue); * buffer[FixedHeaderTryConst.KEYSIZE + 2] = (byte)(body.Length % ConstValues._8MaxValue); */ PackageBodyOperator.FillBodyLen(buffer, FixedHeaderTryConst.KEYSIZE, body.Length); Buffer.BlockCopy(Encoding.UTF8.GetBytes(body), 0, buffer, FixedHeaderTryConst.HEARSIZE, body.Length); return(new ArraySegment <byte>(buffer)); }
//offset = 0 protected override int GetBodyLengthFromHeader(byte[] header, int offset, int length) { return(PackageBodyOperator.GetBodyLen(header, offset + FixedHeaderTryConst.KEYSIZE)); }