void ClientManager::removeClient(sid_type sid) throw() { assert(hasClient(sid)); if(localUsers.count(sid)) { UserInfo* i = localUsers[sid]->getUserInfo(); nicks.erase(i->getNick()); cids.erase(i->getCID()); localUsers.erase(sid); } else { UserInfo* i = remoteUsers[sid]; nicks.erase(i->getNick()); cids.erase(i->getCID()); delete i; remoteUsers.erase(sid); } }
void ClientManager::addRemoteClient(sid_type sid, UserInfo const& ui) throw() { assert(!hasClient(sid) || remoteUsers.count(sid)); if(!remoteUsers.count(sid)) remoteUsers[sid] = new UserInfo(Command('B', Command::INF, sid)); if(ui.has("ID") && remoteUsers[sid]->has("ID")) { cids.erase(remoteUsers[sid]->getCID()); cids.insert(ui.getCID()); } if(ui.has("NI") && remoteUsers[sid]->has("NI")) { nicks.erase(remoteUsers[sid]->getNick()); nicks.insert(ui.getNick()); } remoteUsers[sid]->update(ui); }