コード例 #1
0
        /// <summary>
        /// Registers a function that decodes a particular message type.
        /// </summary>
        /// <typeparam name="T">The type of the decoded message.</typeparam>
        /// <param name="protocol">The message's protocol.</param>
        /// <param name="messageType">The type of the message.</param>
        /// <exception cref="ArgumentException">More than one decoder for the same protocol message is added.</exception>
        public void RegisterMessageDecoder <T>(object protocol, object messageType) where T : ISpecificRecord
        {
            var messageKey = EtpExtensions.CreateMessageKey(Convert.ToInt32(protocol), Convert.ToInt32(messageType));

            if (MessageDecoders.ContainsKey(messageKey))
            {
                throw new ArgumentException($"Duplicate decoder: Protocol: {protocol}; Message Type: {messageType}", "messageType");
            }

            MessageDecoders[messageKey]      = (d, b) => EtpExtensions.Decode <T>(d, b);
            MessageDecodersByType[typeof(T)] = MessageDecoders[messageKey];
        }