/// <summary>
        /// Notifies subscribers of the specified event handler.
        /// </summary>
        /// <typeparam name="T">The type of the message.</typeparam>
        /// <typeparam name="TContext">The type of the context.</typeparam>
        /// <param name="handler">The message handler.</param>
        /// <param name="header">The message header.</param>
        /// <param name="message">The message body.</param>
        /// <param name="context">The message context.</param>
        /// <returns>The protocol event args.</returns>
        protected ProtocolEventArgs <T, TContext> Notify <T, TContext>(ProtocolEventHandler <T, TContext> handler, IMessageHeader header, T message, TContext context) where T : ISpecificRecord
        {
            var args = new ProtocolEventArgs <T, TContext>(header, message, context);

            handler?.Invoke(this, args);
            return(args);
        }
        /// <summary>
        /// Notifies subscribers of the specified event handler.
        /// </summary>
        /// <typeparam name="T">The type of the message.</typeparam>
        /// <param name="handler">The message handler.</param>
        /// <param name="header">The message header.</param>
        /// <param name="message">The message body.</param>
        /// <returns>The protocol event args.</returns>
        protected ProtocolEventArgs <T> Notify <T>(ProtocolEventHandler <T> handler, IMessageHeader header, T message) where T : ISpecificRecord
        {
            var args = new ProtocolEventArgs <T>(header, message);

            Received(header, message);
            handler?.Invoke(this, args);
            return(args);
        }