void SocketReactor::removeEventHandler(const Socket& socket, const Poco::AbstractObserver& observer) { NotifierPtr pNotifier; { FastMutex::ScopedLock lock(_mutex); EventHandlerMap::iterator it = _handlers.find(socket); if (it != _handlers.end()) { pNotifier = it->second; if (pNotifier->hasObserver(observer) && pNotifier->countObservers() == 1) { _handlers.erase(it); } } } if (pNotifier && pNotifier->hasObserver(observer)) { pNotifier->removeObserver(this, observer); } }
void SocketReactor::addEventHandler(const Socket& socket, const Poco::AbstractObserver& observer) { NotifierPtr pNotifier; { FastMutex::ScopedLock lock(_mutex); EventHandlerMap::iterator it = _handlers.find(socket); if (it == _handlers.end()) { pNotifier = new SocketNotifier(socket); _handlers[socket] = pNotifier; } else pNotifier = it->second; } if (!pNotifier->hasObserver(observer)) pNotifier->addObserver(this, observer); }