Exemple #1
0
 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);
        }
Exemple #3
0
 public override void EncodeBody(Common.NetworkBuffer outBuffer)
 {
     Messages.MySerializer.GetInstance().Serialize <T>(outBuffer, protocol);
 }
Exemple #4
0
 public override Message DecodeBody(Common.NetworkBuffer inBuffer, int offset, int count)
 {
     protocol = (T)Messages.MySerializer.GetInstance().DeserializeByteBuffer(inBuffer, offset, count, typeof(T));
     return(this);
 }