public byte[] ToByte()
        {
            var result = new byte[MessageHeaderSize];
            var offset = 0;

            offset = ByteHandler.ToBytes(result, offset, uMagicNumber);
            offset = ByteHandler.ToBytes(result, offset, uVersion);
            offset = ByteHandler.ToBytes(result, offset, uMessageSize);
            return(result);
        }
        public MessageHeader(byte[] data)
        {
            if (data.Length != MessageHeaderSize)
            {
                throw new ApplicationException(
                          "INTERNAL ERROR - MessageHeader constructor passed buffer of invalid length");
            }
            var offset = 0;

            offset = ByteHandler.FromBytes(data, offset, out uMagicNumber);
            offset = ByteHandler.FromBytes(data, offset, out uVersion);
            offset = ByteHandler.FromBytes(data, offset, out uMessageSize);

            if (offset != 12)
            {
                throw new ApplicationException("FATAL INTERNAL ERROR - MessageHeader is not 12 bytes long");
            }
            if (uMagicNumber != ConstantForMagicNumber)
            {
                throw new ApplicationException("FATAL COMMUNICATIONS ERROR - MessageHeader Magic number is invalid");
            }
        }