BACnet.Core.App.Messages.ConfirmedRequestMessage.Deserialize C# (CSharp) Method

Deserialize() public method

Deserializes the confirmed request message from a buffer
public Deserialize ( byte buffer, int offset, int end ) : int
buffer byte The buffer to deserialize from
offset int The offset to begin deserializing
end int The end of the buffer content
return int
        public int Deserialize(byte[] buffer, int offset, int end)
        {
            byte header = buffer.ReadUInt8(offset++);
            if ((MessageType)(header >> 4) != MessageType.ConfirmedRequest)
                throw new Exception("Could not deserialize an unconfirmed request message");

            this.Segmented = (header & 0x08) > 0;
            this.MoreFollows = (header & 0x04) > 0;
            this.SegmentedResponseAccepted = (header & 0x02) > 0;

            header = buffer.ReadUInt8(offset++);
            MaxSegments maxSegments = (MaxSegments)((header & 0x70) >> 4);
            MaxAppgramLength maxAppgramLength = (MaxAppgramLength)(header & 0x0F);

            switch(maxSegments)
            {
                case MaxSegments.Unspecified:
                    this.MaxSegmentsAccepted = 1;
                    break;
                case MaxSegments.Two:
                    this.MaxSegmentsAccepted = 2;
                    break;
                case MaxSegments.Four:
                    this.MaxSegmentsAccepted = 4;
                    break;
                case MaxSegments.Eight:
                    this.MaxSegmentsAccepted = 8;
                    break;
                case MaxSegments.Sixteen:
                    this.MaxSegmentsAccepted = 16;
                    break;
                case MaxSegments.ThirtyTwo:
                    this.MaxSegmentsAccepted = 32;
                    break;
                case MaxSegments.SixtyFour:
                    this.MaxSegmentsAccepted = 64;
                    break;
                case MaxSegments.GreaterThanSixtyFour:
                    this.MaxSegmentsAccepted = Int32.MaxValue;
                    break;
                default:
                    throw new Exception("Unrecognized max segments value");
            }

            switch(maxAppgramLength)
            {
                case MaxAppgramLength._50:
                    this.MaxAppgramLengthAccepted = 50;
                    break;
                case MaxAppgramLength._128:
                    this.MaxAppgramLengthAccepted = 128;
                    break;
                case MaxAppgramLength._206:
                    this.MaxAppgramLengthAccepted = 206;
                    break;
                case MaxAppgramLength._480:
                    this.MaxAppgramLengthAccepted = 480;
                    break;
                case MaxAppgramLength._1024:
                    this.MaxAppgramLengthAccepted = 1024;
                    break;
                case MaxAppgramLength._1476:
                    this.MaxAppgramLengthAccepted = 1476;
                    break;
                default:
                    throw new Exception("Unrecognized max appgram length value");
            }

            this.InvokeId = buffer[offset++];
            if(this.Segmented)
            {
                this.SequenceNumber = buffer[offset++];
                this.ProposedWindowSize = buffer[offset++];
            }
            this.ServiceChoice = buffer[offset++];

            return offset;
        }
ConfirmedRequestMessage