Ejemplo n.º 1
0
Channel* Server::new_channel(const std::string &cname){
	if(used_channels.size >= ServerConfig::max_channels){
		return NULL;
	}
#if USE_MEM_POLL
	Channel *channel = free_channels.head;
	assert(channel->subs.size == 0);
	// first remove, then push_back, do not mistake the order
	free_channels.remove(channel);
#else
	Channel *channel = new Channel();
#endif
	used_channels.push_back(channel);

	channel->name = cname;
	cname_channels[channel->name] = channel;
	log_debug("new channel: %s", channel->name.c_str());
	
	add_presence(PresenceOnline, channel->name);
	
	if(channel->token.empty()){
		channel->create_token();
	}

	return channel;
}
Ejemplo n.º 2
0
void Server::free_channel(Channel *channel){
	assert(channel->subs.size == 0);
	log_debug("free channel: %d, name: %s", channel->id, channel->name.c_str());
	add_presence(PresenceOffline, channel->name);

	// first remove, then push_back, do not mistake the order
	used_channels.remove(channel);
	free_channels.push_back(channel);

	cname_channels.erase(channel->name);
	channel->reset();
}
Ejemplo n.º 3
0
void Server::free_channel(Channel *channel){
	log_debug("free channel: %s", channel->name.c_str());
	add_presence(PresenceOffline, channel->name);

	cname_channels.erase(channel->name);
	used_channels.remove(channel);

	LinkedList<Subscriber *>::Iterator it2 = channel->subs.iterator();
	while(Subscriber *sub = it2.next()){
		delete sub;
	}
	delete channel;
}
Ejemplo n.º 4
0
Channel* Server::new_channel(const std::string &cname){
	if(used_channels.size >= ServerConfig::max_channels){
		return NULL;
	}
	log_debug("new channel: %s", cname.c_str());

	Channel *channel = new Channel();
	channel->serv = this;
	channel->name = cname;
	channel->create_token();
	
	add_presence(PresenceOnline, channel->name);

	used_channels.push_back(channel);
	cname_channels[channel->name] = channel;
	
	return channel;
}
Ejemplo n.º 5
0
Channel* Server::new_channel(const std::string &cname){
	if(free_channels.empty()){
		return NULL;
	}
	Channel *channel = free_channels.head;
	assert(channel->subs.size == 0);
	// first remove, then push_back, do not mistake the order
	free_channels.remove(channel);
	used_channels.push_back(channel);

	channel->name = cname;
	cname_channels[channel->name] = channel;
	log_debug("new channel: %d, name: %s", channel->id, channel->name.c_str());
	
	add_presence(PresenceOnline, channel->name);
	
	if(channel->token.empty()){
		channel->create_token();
	}

	return channel;
}