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

Serialize() public method

Serializes the confirmed request message to a buffer
public Serialize ( byte buffer, int offset ) : int
buffer byte The buffer to serialize to
offset int The offset to begin serializing
return int
        public int Serialize(byte[] buffer, int offset)
        {
            byte header = (byte)Type;
            header <<= 4;
            header |= (byte)(Segmented ? 0x08 : 0x00);
            header |= (byte)(MoreFollows ? 0x04 : 0x00);
            header |= (byte)(SegmentedResponseAccepted ? 0x02 : 0x00);
            buffer[offset++] = header;

            MaxSegments maxSegments = MaxSegments.Unspecified;
            MaxAppgramLength maxAppgramLength = MaxAppgramLength._50;

            if (MaxSegmentsAccepted > 64)
                maxSegments = MaxSegments.GreaterThanSixtyFour;
            else if (MaxSegmentsAccepted == 64)
                maxSegments = MaxSegments.SixtyFour;
            else if (MaxSegmentsAccepted >= 32)
                maxSegments = MaxSegments.ThirtyTwo;
            else if (MaxSegmentsAccepted >= 16)
                maxSegments = MaxSegments.Sixteen;
            else if (MaxSegmentsAccepted >= 8)
                maxSegments = MaxSegments.Eight;
            else if (MaxSegmentsAccepted >= 4)
                maxSegments = MaxSegments.Four;
            else if (MaxSegmentsAccepted >= 2)
                maxSegments = MaxSegments.Two;
            else
                maxSegments = MaxSegments.Unspecified;

            if (MaxAppgramLengthAccepted >= 1476)
                maxAppgramLength = MaxAppgramLength._1476;
            else if (MaxAppgramLengthAccepted >= 1024)
                maxAppgramLength = MaxAppgramLength._1024;
            else if (MaxAppgramLengthAccepted >= 480)
                maxAppgramLength = MaxAppgramLength._480;
            else if (MaxAppgramLengthAccepted >= 206)
                maxAppgramLength = MaxAppgramLength._206;
            else if (MaxAppgramLengthAccepted >= 128)
                maxAppgramLength = MaxAppgramLength._128;
            else if (MaxAppgramLengthAccepted >= 50)
                maxAppgramLength = MaxAppgramLength._50;
            else
                throw new Exception("MaxAppgramLengthAccepted is small than minimum value");

            header = (byte)maxSegments;
            header <<= 4;
            header |= (byte)maxAppgramLength;
            buffer[offset++] = header;

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

            buffer[offset++] = ServiceChoice;

            return offset;
        }
ConfirmedRequestMessage