/// <summary>
        /// Reads and constructs a NGRIDMessage according to the protocol rules.
        /// </summary>
        /// <param name="deserializer">Deserializer to read message</param>
        /// <returns>NGRIDMessage object that is read</returns>
        public NGRIDMessage ReadMessage(INGRIDDeserializer deserializer)
        {
            //Read protocol type
            var protocolType = deserializer.ReadUInt32();
            if (protocolType != NGRIDDefaultProtocolType)
            {
                throw new NGRIDException("Wrong protocol type: " + protocolType + ".");
            }

            //Read message type
            var messageTypeId = deserializer.ReadInt32();

            //Read and return message
            return deserializer.ReadObject(() => NGRIDMessageFactory.CreateMessageByTypeId(messageTypeId));
        }
        /// <summary>
        /// Reads and constructs a NGRIDMessage according to the protocol rules.
        /// </summary>
        /// <param name="deserializer">Deserializer to read message</param>
        /// <returns>NGRIDMessage object that is read</returns>
        public NGRIDMessage ReadMessage(INGRIDDeserializer deserializer)
        {
            //Read protocol type
            var protocolType = deserializer.ReadUInt32();

            if (protocolType != NGRIDDefaultProtocolType)
            {
                throw new NGRIDException("Wrong protocol type: " + protocolType + ".");
            }

            //Read message type
            var messageTypeId = deserializer.ReadInt32();

            //Read and return message
            return(deserializer.ReadObject(() => NGRIDMessageFactory.CreateMessageByTypeId(messageTypeId)));
        }