An event factory is a generic thread-safe object for dispatching internal application events. Application events are identified by an event key, and have some associated event data.
typedef eventfactory<std::string, int> myfactory_t; myfactory_t myfactory(myfactory_t::create());
    This example creates an event factory whose events are identified by
    a std::string, with each
    event's data being a simple int.
  
Handlers for an event are implemented by subclassing from x::eventhandlerObj. This is a template class, whose template parameter is the event data type.
class myEventHandlerObj : public x::eventhandlerObj<int> { public: myEventHandlerObj() noexcept {} ~myEventHandlerObj() {} void event(const int &eventArg); }; typedef x::ref<myEventHandlerObj> myEventHandler; myEventHandler evh(myEventHandler::create());
    x::eventhandlerObj is a
    reference-counted object.
    The event handler subclass must implement the event
    method, that takes a constant reference to the event data type as its sole
    argument.
  
    The event handler gets registered with the event factory by invoking
    the registerHandler method:
  
x::eventregistration regevent(myfactory->registerHandler("fileavailable", evh);
    The event handler is associated with an event key
    “fileavailable”. This example uses an event factory whose
    events are keyed by a std::string.
    Reported events with the given event key are passed along to all event
    handlers registered for the event key, and each registered handler's
    event() method receives the event argument,
    the int.
  
    registerHandler() returns an
    x::eventregistration.
    This is an opaque reference to the registered event handler.
    The registered event handler receives events as long as this opaque
    reference remains in scope.
    When this
    x::eventregistration
    goes out of scope, the event handler gets deregistered from the event
    factory, and will no longer receive any reported events.
  
    An event gets reported by invoking event():
  
myfactory->event("fileavailable", 4);
    All event handlers that are registered for the
    “fileavailable” event are invoked, receiving
    4 as the event handler's argument.
    x::eventfactory
    has several overloaded event() methods for reporting
    multiple events in several convenient ways.