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

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

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

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

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

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