std::string TimeServiceProxy::remoting__enableEvents(Poco::RemotingNG::Listener::Ptr pListener, bool enable) { std::string subscriberURI; if ((_pEventListener && !enable) || (!_pEventListener && enable)) { Poco::RemotingNG::EventListener::Ptr pEventListener = pListener.cast<Poco::RemotingNG::EventListener>(); if (pEventListener) { if (enable) { std::string eventURI = remoting__getEventURI().empty() ? remoting__getURI().toString() : remoting__getEventURI().toString(); _pEventSubscriber = new TimeServiceEventSubscriber(eventURI, this); subscriberURI = pEventListener->subscribeToEvents(_pEventSubscriber); _pEventListener = pEventListener; } else if (_pEventListener == pEventListener) { try { _pEventListener->unsubscribeFromEvents(_pEventSubscriber); } catch (...) { _pEventSubscriber = 0; _pEventListener = 0; throw; } _pEventSubscriber = 0; _pEventListener = 0; } else throw Poco::RemotingNG::RemotingException("EventListener mismatch"); } else throw Poco::RemotingNG::RemotingException("Listener is not an EventListener"); } return subscriberURI; }
void IORemoteObject::remoting__enableRemoteEvents(const std::string& protocol) { Poco::RemotingNG::EventDispatcher::Ptr pEventDispatcher = new IOEventDispatcher(this, protocol); Poco::RemotingNG::ORB::instance().registerEventDispatcher(remoting__getURI().toString(), pEventDispatcher); }