void ServerManager::Process() { ProcessDisconnect(); EmuTCPConnection *tcp_c = nullptr; while(tcp_c = tcps->NewQueuePop()) { in_addr tmp; tmp.s_addr = tcp_c->GetrIP(); server_log->Log(log_network, "New world server connection from %s:%d", inet_ntoa(tmp), tcp_c->GetrPort()); WorldServer *cur = GetServerByAddress(tcp_c->GetrIP()); if(cur) { server_log->Log(log_network, "World server already existed for %s, removing existing connection and updating current.", inet_ntoa(tmp)); cur->GetConnection()->Free(); cur->SetConnection(tcp_c); cur->Reset(); } else { WorldServer *w = new WorldServer(tcp_c); world_servers.push_back(w); } } list<WorldServer*>::iterator iter = world_servers.begin(); while(iter != world_servers.end()) { if((*iter)->Process() == false) { server_log->Log(log_world, "World server %s had a fatal error and had to be removed from the login.", (*iter)->GetLongName().c_str()); delete (*iter); iter = world_servers.erase(iter); } else { ++iter; } } }