/** * Destroys a channel. This will send LCH messages to all channel participants if the channel exists. * @param string channel name * @returns Nothing. */ int LuaChannel::destroyChannel(lua_State* L) { luaL_checkany(L, 1); string name = luaL_checkstring(L, 1); lua_pop(L, 1); ChannelPtr chan = ServerState::getChannel(name); if (chan) { const ChannelType type = chan->getType(); const char* channame = chan->getName().c_str(); const chconlist_t particpants = chan->getParticipants(); for (chconlist_t::const_iterator i = particpants.begin(); i != particpants.end(); ++i) { json_t* root = json_object(); json_object_set_new_nocheck(root, "channel", json_string_nocheck(channame) ); json_object_set_new_nocheck(root, "character", json_string_nocheck((*i)->characterName.c_str()) ); const char* leavestr = json_dumps(root, JSON_COMPACT); string msg = "LCH "; msg += leavestr; free((void*) leavestr); json_decref(root); MessagePtr outMessage(MessageBuffer::fromString(msg)); (*i)->send(outMessage); chan->part((*i)); } ServerState::removeChannel(name); if (type == CT_PUBLIC) ServerState::rebuildChannelOpList(); } return 0; }
int LuaTesting::killChannel(lua_State* L) { luaL_checkany(L, 1); string chanName = luaL_checkstring(L, 1); lua_pop(L, 1); ChannelPtr chan = ServerState::getChannel(chanName); if (chan) { const chconlist_t particpants = chan->getParticipants(); for (chconlist_t::const_iterator i = particpants.begin(); i != particpants.end(); ++i) { chan->part(*i); } ServerState::removeChannel(chanName); } return 0; }