示例#1
0
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);
	}
}
示例#2
0
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);
}