/// <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]; }