void QCopChannel::detach( const QWSClient *cl ) { if ( !qcopServerMap ) return; QCopServerMap::Iterator it = qcopServerMap->begin(); for ( ; it != qcopServerMap->end(); it++ ) { if (it.data().containsRef(cl)) { it.data().removeRef( cl ); // If this was the last client in the channel, announce the channel as dead. if (it.data().count() == 0) { QWSServerSignalBridge* qwsBridge = new QWSServerSignalBridge(); connect(qwsBridge, SIGNAL(removedChannel(const QString&)), qwsServer, SIGNAL(removedChannel(const QString&))); qwsBridge->emitRemovedChannel(it.key()); delete qwsBridge; } } } }
/*! \internal Server side: subscribe client \a cl on channel \a ch. */ void QCopChannel::registerChannel( const QString &ch, const QWSClient *cl ) { if ( !qcopServerMap ) qcopServerMap = new QCopServerMap; // do we need a new channel list ? QCopServerMap::Iterator it = qcopServerMap->find( ch ); if ( it == qcopServerMap->end() ) it = qcopServerMap->insert( ch, QList<QWSClient>() ); // If this is the first client in the channel, announce the channel as being created. if (it.data().count() == 0) { QWSServerSignalBridge* qwsBridge = new QWSServerSignalBridge(); connect(qwsBridge, SIGNAL(newChannel(const QString&)), qwsServer, SIGNAL(newChannel(const QString&))); qwsBridge->emitNewChannel(ch); delete qwsBridge; } it.data().append( cl ); }