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; }
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(); }
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; }
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; }
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; }