public void 用广播() { IMulEventListener <CMsg> listener1 = Substitute.For <IMulEventListener <CMsg> >(); IMulEventListener <CMsg> listener2 = Substitute.For <IMulEventListener <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>(IMulEventListener <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>(IMulEventListener <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 IMulEventListener <T> caller, string tag) where T : class { EventManager.UnRegister(caller, tag); }