public Message(byte[] buffer, int offset) : base(buffer, offset) { Contract.Requires <ArgumentNullException>(buffer != null, "buffer"); Contract.Requires <ArgumentException>(buffer.Length >= Message.MinimumByteSize, "buffer"); Contract.Requires <ArgumentOutOfRangeException>(offset >= 0, "offset"); Contract.Requires <ArgumentOutOfRangeException>(offset <= buffer.Length - Message.MinimumByteSize, "offset"); Network = (MessageNetwork)buffer.ReadUInt32(offset); Command = Encoding.ASCII.GetString(buffer, Command_Offset(ref offset), MAX_COMMAND_LENGTH).TrimEnd('\0'); PayloadLength = buffer.ReadUInt32(PayloadLength_Offset(ref offset)); ByteSize = ((uint)Network).ByteSize() + MAX_COMMAND_LENGTH * BufferOperations.UINT8_SIZE + PayloadLength.ByteSize(); if (MessagePayloadFactory.PayloadRequiresChecksum(Command)) { Checksum = buffer.ReadUInt32(Checksum_Offset(ref offset)); ByteSize += Checksum.ByteSize(); } Payload = MessagePayloadFactory.ConstructMessagePayload(Command, buffer, Payload_Offset(ref offset), PayloadLength); ByteSize += Payload.ByteSize; }
private int Payload_Offset(ref int offset) { return(offset += (int)(MessagePayloadFactory.PayloadRequiresChecksum(Command) ? Checksum.ByteSize() : 0)); }