public override bool Decode(Common.NetworkBuffer msgBuffer, ref int msgCount) { if (msgBuffer.ReadableBytes < length) { return(false); } else { msgCount = length; return(true); } }
public override bool Decode(Common.NetworkBuffer msgBuffer, ref int msgCount) { if (msgBuffer.ReadableBytes < lengthFieldEndOffset) { return(false); } int actualLengthFieldOffset = msgBuffer.ReadOffset + lengthFieldOffset; int frameLength; switch (lengthFieldLength) { case 1: frameLength = msgBuffer.GetByte(actualLengthFieldOffset); break; case 2: frameLength = msgBuffer.GetUInt16(actualLengthFieldOffset); break; case 4: frameLength = msgBuffer.GetInt32(actualLengthFieldOffset); break; default: throw new CorruptedFrameException("should not reach here"); } if (frameLength < 0) { msgBuffer.SkipBytes(lengthFieldEndOffset); throw new CorruptedFrameException( "negative pre-adjustment length field: " + frameLength); } frameLength += lengthAdjustment + lengthFieldEndOffset; if (frameLength < lengthFieldEndOffset) { msgBuffer.SkipBytes(lengthFieldEndOffset); throw new CorruptedFrameException( "Adjusted frame length (" + frameLength + ") is less " + "than lengthFieldEndOffset: " + lengthFieldEndOffset); } if (frameLength > maxFrameLength) { // Enter the discard mode and discard everything received so far. //discardingTooLongFrame = true; tooLongFrameLength = frameLength; bytesToDiscard = frameLength - msgBuffer.ReadableBytes; msgBuffer.SkipBytes(msgBuffer.ReadableBytes); throw new CorruptedFrameException(String.Format("too long frame, frame length:{0}", tooLongFrameLength)); } // never overflows because it's less than maxFrameLength int frameLengthInt = (int)frameLength; if (msgBuffer.ReadableBytes < frameLengthInt) { return(false); } if (initialBytesToStrip > frameLengthInt) { msgBuffer.SkipBytes(frameLengthInt); throw new CorruptedFrameException( "Adjusted frame length (" + frameLength + ") is less " + "than initialBytesToStrip: " + initialBytesToStrip); } msgBuffer.SkipBytes(initialBytesToStrip); msgCount = frameLengthInt - initialBytesToStrip; return(true); }
public override void EncodeBody(Common.NetworkBuffer outBuffer) { Messages.MySerializer.GetInstance().Serialize <T>(outBuffer, protocol); }
public override Message DecodeBody(Common.NetworkBuffer inBuffer, int offset, int count) { protocol = (T)Messages.MySerializer.GetInstance().DeserializeByteBuffer(inBuffer, offset, count, typeof(T)); return(this); }