void InformationCore::TimeoutSockets() { if(!usepings) return; /* burlex: this is vulnerable to race conditions, adding a mutex to it. */ serverSocketLock.Acquire(); uint32 t = time(NULL); // check the ping time set<LogonCommServerSocket*>::iterator itr, it2; LogonCommServerSocket * s; for(itr = m_serverSockets.begin(); itr != m_serverSockets.end();) { s = *itr; it2 = itr; ++itr; if(s->last_ping < t && ((t - s->last_ping) > 60)) { // ping timeout printf("Closing socket due to ping timeout.\n"); s->removed = true; set<uint32>::iterator itr = s->server_ids.begin(); for(; itr != s->server_ids.end(); ++itr) RemoveRealm(*itr); m_serverSockets.erase(it2); s->Disconnect(); } } serverSocketLock.Release(); }
int AuthConfig::Run() { ReadFromFile(); ShowMainMenu(); while (true) { std::cout << "> "; char key = (char)_getch(); std::cout << key << std::endl; if (key == '9') break; else if (key == '1') ListRealms(); else if (key == '2') AddRealm(); else if (key == '3') RemoveRealm(); else if (key == '4') ListUsers(); else if (key == '5') AddUser(); else if (key == '6') RemoveUser(); else if (key == '7') ChangeUserRealm(); else if (key == '8') ChangeUserPassword(); else if (key == '?') ShowMainMenu(); else UnrecognizedCmd(); } return 0; }