*/
const SubscriberList& GetSubscribers() const { return prov->subscribers; }
- friend class ModuleEventListener;
+ /** Subscribes a listener to this event.
+ * @param subscriber The listener to subscribe.
+ */
+ void Subscribe(ModuleEventListener* subscriber)
+ {
+ subscribers.insert(subscriber);
+ OnSubscribe(subscriber);
+ }
+
+ /** Unsubscribes a listener from this event.
+ * @param subscriber The listener to unsubscribe.
+ */
+ void Unsubscribe(ModuleEventListener* subscriber)
+ {
+ subscribers.erase(subscriber);
+ OnUnsubscribe(subscriber);
+ }
private:
void OnCapture() CXX11_OVERRIDE
subscribers.clear();
}
+ /** Called when a listener subscribes to this event.
+ * @param subscriber The listener which subscribed.
+ */
+ virtual void OnSubscribe(ModuleEventListener* subscriber) { }
+
+ /** Called when a listener unsubscribes from this event.
+ * @param subscriber The listener which unsubscribed.
+ */
+ virtual void OnUnsubscribe(ModuleEventListener* subscriber) { }
+
/** Reference to the active provider for this event. In case multiple event providers
* exist for the same event, only one of them contains the list of subscribers.
* To handle the case when we are not the ones with the list, we get it from the provider
*/
void OnCapture() CXX11_OVERRIDE
{
- prov->subscribers.insert(this);
+ prov->Subscribe(this);
}
public:
~ModuleEventListener()
{
if (prov)
- prov->subscribers.erase(this);
+ prov->Unsubscribe(this);
}
/** Retrieves the module which created this listener. */