private void UnSubscribe(object subscriber, SubscriberMethod method) { int eventId = method.EventId; if (!_subMap.ContainsKey(eventId)) { return; } List <Subscription> subList = _subMap[eventId]; List <Subscription> removeSubList = new List <Subscription>(); for (int i = 0; i < subList.Count; i++) { Subscription subscription = subList[i]; if (subscription.Subscriber == subscriber) { removeSubList.Add(subscription); } } for (int i = 0; i < removeSubList.Count; i++) { subList.Remove(removeSubList[i]); } }
public void UnRegister(object subscriber) { Type subClass = subscriber.GetType(); List <SubscriberMethod> methodList = FindSubscriberMethods(subClass); for (int i = 0; i < methodList.Count; i++) { SubscriberMethod method = methodList[i]; UnSubscribe(subscriber, method); } }
private void Subscribe(object subscriber, SubscriberMethod method) { int eventId = method.EventId; if (!_subMap.ContainsKey(eventId)) { _subMap.Add(eventId, new List <Subscription>()); } List <Subscription> subList = _subMap[eventId]; subList.Add(new Subscription(subscriber, method)); }
private List <SubscriberMethod> FindSubscriberMethods(Type subscriberClass) { List <SubscriberMethod> rlt = new List <SubscriberMethod>(); MethodInfo[] methods = subscriberClass.GetMethods(); for (int i = 0; i < methods.Length; i++) { MethodInfo method = methods[i]; SubscribeAttribute attr = method.GetCustomAttribute <SubscribeAttribute>(); if (attr != null) { SubscriberMethod m = new SubscriberMethod(); m.EventId = attr.EventId; m.Method = method; rlt.Add(m); } } return(rlt); }
public Subscription(object subscriber, SubscriberMethod method) { Subscriber = subscriber; Method = method; }