class EventDispatcher

File Information

Library: RemotingNG
Package: ORB
Header: Poco/RemotingNG/EventDispatcher.h


The EventDispatcher is responsible for delivering events fired by service objects to remote subscribers.

Event dispatching and delivery in RemotingNG works as follows: If a service object has events, the corresponding RemoteObject class will have a delegate member function for every service object event, as well as providing all the events itself (inherited from the interface class). During construction of the RemoteObject, its delegates will be bound to the service objects' events. The delegates will then simply fire the RemoteObject's event, when invoked.

The EventDispatcher subclass for a specific service will have delegate functions for all service object events, which will be bound to the RemoteObject's events. The EventDispatcher class maintains a list of event subscribers. When an event is fired, the EventDispatcher's delegate will dispatch the event to all registered event subscribers, using a Transport. This works in a very similar way to a Proxy.


Direct Base Classes: Poco::RefCountedObject

All Base Classes: Poco::RefCountedObject

Member Summary

Member Functions: accept, attributes, protocol, removeEventFilter, setEventFilter, setEventFilterImpl, subscribe, transportForSubscriber, unsubscribe

Inherited Functions: duplicate, referenceCount, release

Nested Classes

struct SubscriberInfo protected


Types Aliases

FilterMap protected

using FilterMap = std::map < std::string, Poco::Any >;


using NameValueMap = Transport::NameValueMap;


using Ptr = Poco::AutoPtr < EventDispatcher >;

SubscriberMap protected

using SubscriberMap = std::map < std::string, SubscriberInfo::Ptr >;



    const std::string & protocol

Creates an EventDispatcher.


~EventDispatcher virtual

virtual ~EventDispatcher();

Destroys the EventDispatcher.

Member Functions

attributes inline

AttributedObject & attributes(
    const std::string & subscriberURI

Returns the attributes for the subscriber identified by the given URI. The attributes are stored in the Transport object.

protocol inline

const std::string & protocol() const;

Returns the protocol to be used for delivering event messages to subscribers.


void removeEventFilter(
    const std::string & subscriberURI,
    const std::string & event

Removes the event filter for the given subscriber and event.

setEventFilter inline

template < typename T > void setEventFilter(
    const std::string & subscriberURI,
    const std::string & event,
    typename EventFilter < T >::Ptr pFilter

Sets an event filter for the given subscriber and event.

If pFilter is null, removes the filter.


void subscribe(
    const std::string & subscriberURI,
    const std::string & endpointURI,
    Poco::Clock expireTime = 0

Registers a remote EventSubscriber identified by the given subscriberURI. Events will be sent to the specified endpoint, which must be a proper RemotingNG URI. Depending on the actual transport-specific events implementation, subscriberURI and endpointURI may be the same or different.

If a non-null expireTime is given, the subscription will automatically expire at the time given in expireTime.

If a subscription with the given subscriberURI already exists, the expireTime of the existing subscription will be updated.


void unsubscribe(
    const std::string & subscriberURI

Unregisters the remote EventSubscriber identified by the given URI.

Throws a Poco::NotFoundException if no subscription exists.

accept protected inline

template < typename T > bool accept(
    const FilterMap & filters,
    const std::string & event,
    const T & value

setEventFilterImpl protected

void setEventFilterImpl(
    const std::string & subscriberURI,
    const std::string & event,
    const Poco::Any & filter

Sets the event filter for the given subscriber and event.

If the given filter is empty, removes the filter.

transportForSubscriber protected

Transport & transportForSubscriber(
    const std::string & subscriberURI

Returns the Transport object for communicating with the remote EventSubscriber identified by the given URI.

Throws a Poco::NotFoundException if the subscriber is not known.


_mutex protected

Poco::FastMutex _mutex;

_subscribers protected

SubscriberMap _subscribers;