public void 用广播() { MulEventListener <CMsg> listener1 = Substitute.For <MulEventListener <CMsg> >(); MulEventListener <CMsg> listener2 = Substitute.For <MulEventListener <CMsg> >(); listener1.StartListening(TAG); listener2.StartListening(TAG2); CMsg.Trigger(TAG, "name"); CMsg.Trigger(TAG2, "name2"); //检测OnEvent是否调用,并且第一个参数是CMsg,第二个参数是对应的TAG listener1.Received().OnEvent(Arg.Any <CMsg>(), TAG); listener2.Received().OnEvent(Arg.Any <CMsg>(), TAG2); }
public static void Register <T>(MulEventListener <T> listener, string tag) where T : class { Type eventType = typeof(T); if (!_mulSubscribersDic.ContainsKey(eventType)) { _mulSubscribersDic[eventType] = new List <MulEventListenerContainer>(); } if (!MulSubscriptionExists(eventType, listener, tag)) { _mulSubscribersDic[eventType].Add(new MulEventListenerContainer(tag, listener)); } }
public static void UnRegister <T>(MulEventListener <T> listener, string tag) where T : class { Type eventType = typeof(T); if (!_mulSubscribersDic.ContainsKey(eventType)) { #if EVENTROUTER_THROWEXCEPTIONS throw new ArgumentException(string.Format("Removing listener \"{0}\", but the event type \"{1}\" isn't registered.", listener, eventType.ToString())); #else return; #endif } List <MulEventListenerContainer> mulSubscriberList = _mulSubscribersDic[eventType]; #pragma warning disable 219 bool listenerFound = false; #pragma warning restore 219 for (int i = 0; i < mulSubscriberList.Count; i++) { if (mulSubscriberList[i].Tag != tag || mulSubscriberList[i].MulEventListener != listener) { continue; } mulSubscriberList.Remove(mulSubscriberList[i]); listenerFound = true; if (mulSubscriberList.Count == 0) { _subscribersDic.Remove(eventType); } return; } #if EVENTROUTER_THROWEXCEPTIONS if (!listenerFound) { throw new ArgumentException(string.Format("Removing listener, but the supplied receiver isn't subscribed to event type \"{0}\".", eventType.ToString())); } #endif }
public static void StopListening <T>(this MulEventListener <T> caller, string tag) where T : class { EventManager.UnRegister(caller, tag); }