bool Streams::subscribe(Peer& peer,UInt32 id,const string& name,FlowWriter& writer,double start) { Publications::Iterator it = createPublication(name); Publication& publication(*it->second); bool result = publication.addListener(peer,id,writer,start==-3000 ? true : false); if(!result && publication.publisherId()==0 && publication.listeners.count()==0) destroyPublication(it); return result; }
void Streams::unsubscribe(Peer& peer,UInt32 id,const string& name) { Publications::Iterator it = _publications.find(name); if(it == _publications.end()) { DEBUG("The stream '%s' doesn't exists, unsubscribe useless",name.c_str()); return; } Publication& publication(*it->second); publication.removeListener(peer,id); if(publication.publisherId()==0 && publication.listeners.count()==0) destroyPublication(it); }
Listener& Streams::subscribe(Peer& peer,UInt32 id,const string& name,FlowWriter& writer,double start) { Publications::Iterator it = createPublication(name); Publication& publication(*it->second); try { return publication.addListener(peer,id,writer,start==-3000 ? true : false); } catch(...) { if(publication.publisherId()==0 && publication.listeners.count()==0) destroyPublication(it); throw; } }
void Streams::unpublish(Peer& peer,UInt32 id,const string& name) { Publications::Iterator it = _publications.find(name); if(it == _publications.end()) { DEBUG("The stream '%s' with a %u id doesn't exist, unpublish useless",name.c_str(),id); return; } Publication& publication(*it->second); publication.stop(peer,id); if(publication.publisherId()==0 && publication.listeners.count()==0) destroyPublication(it); }
Publication& Streams::publish(Peer& peer,UInt32 id,const string& name,FlowWriter* pController) { Publications::Iterator it = createPublication(name); Publication& publication(*it->second); try { publication.start(peer,id,pController); } catch(...) { if(publication.publisherId()==0 && publication.listeners.count()==0) destroyPublication(it); throw; } return publication; }