public ProtocolServer RegisterProtocolMessage <T>(ProtocolMessageDelegate <T> action)
            where T : ProtocolMessage
        {
            if (registeredMessage.ContainsKey(typeof(T)))
            {
                throw new Exception("Event has already registered!");
            }
            registeredMessage.Add(typeof(T), new Action <ProtocolMessage>((e) => { action(this, (T)e); }));

            return(this);
        }
 public void RegisterProtocolMessageOnce <T>(ProtocolMessageDelegate <T> action)
     where T : ProtocolMessage
 {
     if (registeredMessage.ContainsKey(typeof(T)))
     {
         var preMessage  = registeredMessage[typeof(T)];
         var onceMessage = new Action <ProtocolMessage>((e) =>
         {
             action(this, (T)e);
             registeredMessage[typeof(T)] = preMessage;
         });
         registeredMessage.Add(typeof(T), onceMessage);
     }
     else
     {
         registeredMessage.Add(typeof(T), new Action <ProtocolMessage>((e) =>
         {
             action(this, (T)e);
             registeredMessage.Remove(typeof(T));
         }));
     }
 }