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)); })); } }