Ejemplo n.º 1
0
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;
	}
}
Ejemplo n.º 2
0
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);
}
Ejemplo n.º 3
0
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);
}
Ejemplo n.º 4
0
void Invoker::unpublish(Peer& peer,const string& name) {
	auto& it = _publications.find(name);
	if(it == _publications.end()) {
		DEBUG("The publication '",name,"' doesn't exist, unpublish useless");
		return;
	}
	Publication& publication(it->second);
	publication.stop(peer);
	if(!publication.publisher() && publication.listeners.count()==0)
		_publications.erase(it);
}
Ejemplo n.º 5
0
void Streams::unsubscribe(const Client& client,UInt32 id,const string& name) {
	Publications::Iterator it = publications(name);
	if(it == publications.end()) {
		DEBUG("The stream '%s' doesn't exists, unsubscribe useless",name.c_str());
		return;
	}
	Publication& publication(*it->second);
	publication.removeListener(client,id);
	if(publication.publisherId()==0 && publication.listeners.count()==0)
		publications.destroy(it);
}
Ejemplo n.º 6
0
void Streams::unpublish(const Client& client,UInt32 id,const string& name) {
	Publications::Iterator it = publications(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(client,id);
	if(publication.publisherId()==0 && publication.listeners.count()==0)
		publications.destroy(it);
}
Ejemplo n.º 7
0
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;
}