/// <summary> /// Subscribes an observer that observes multiple eventIDs to one callback. /// </summary> /// <param name="cb"></param> /// <param name="eventIDs"></param> public void Subscribe(EventSubscriberCB cb, params EventIDType[] eventIDs) { foreach (EventIDType propertyAlias in eventIDs) { Subscribe(cb, propertyAlias); } }
/// <summary> /// Subscribes an observer that observes one eventID to a callback. /// </summary> /// <param name="eventID"></param> /// <param name="cb"></param> public void Subscribe(EventSubscriberCB cb, EventIDType eventID) { HashSet <EventSubscriberCB> subscriberCBSet; if (!_registeredSubscriberCBMap.TryGetValue(eventID, out subscriberCBSet)) { subscriberCBSet = new HashSet <EventSubscriberCB>(); } subscriberCBSet.Add(cb); _registeredSubscriberCBMap[eventID] = subscriberCBSet; }
/// <summary> /// Check if a observer's callback is subscribed with a eventID. /// </summary> /// <param name="cb"></param> /// <returns></returns> public bool IsSubscribedCB(EventSubscriberCB cb) { foreach (KeyValuePair <EventIDType, HashSet <EventSubscriberCB> > entry in _registeredSubscriberCBMap) { HashSet <EventSubscriberCB> cbSet = entry.Value; if (cbSet.Contains(cb)) { return(true); } } return(false); }
/// <summary> /// Unsubscribe a observer callback to an eventID. The pair must exist for this to be successful. /// </summary> /// <param name="eventID"></param> /// <param name="cb"></param> /// <returns>if the action succeed.</returns> public bool Unsubscribe(EventSubscriberCB cb, EventIDType eventID) { if (_registeredSubscriberCBMap.ContainsKey(eventID)) { HashSet <EventSubscriberCB> subscriberCBSet = _registeredSubscriberCBMap[eventID]; bool isSuccess = subscriberCBSet.Remove(cb); if (subscriberCBSet.Count == 0) { _registeredSubscriberCBMap.Remove(eventID); } return(isSuccess); } return(false); }