[Process Management] Change all executables to use the default event loop run (#2471)

* Loginserver change to event loop run.

* eqlaunch, loginserver, queryserv, world
This commit is contained in:
Alex 2022-10-10 20:55:39 -07:00 committed by GitHub
parent 832bffa811
commit 77c3841a49
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 56 additions and 22 deletions

View File

@ -105,11 +105,17 @@ int main(int argc, char *argv[]) {
Log(Logs::Detail, Logs::Launcher, "Starting main loop..."); Log(Logs::Detail, Logs::Launcher, "Starting main loop...");
ProcLauncher *launch = ProcLauncher::get(); ProcLauncher *launch = ProcLauncher::get();
RunLoops = true; RunLoops = true;
while(RunLoops) { auto loop_fn = [&](EQ::Timer* t) {
//Advance the timer to our current point in time //Advance the timer to our current point in time
Timer::SetCurrentTime(); Timer::SetCurrentTime();
if (!RunLoops) {
EQ::EventLoop::Get().Shutdown();
return;
}
/* /*
* Let the process manager look for dead children * Let the process manager look for dead children
*/ */
@ -120,29 +126,31 @@ int main(int argc, char *argv[]) {
*/ */
zone = zones.begin(); zone = zones.begin();
zend = zones.end(); zend = zones.end();
for(; zone != zend; ++zone) { for (; zone != zend; ++zone) {
if(!zone->second->Process()) if (!zone->second->Process())
to_remove.insert(zone->first); to_remove.insert(zone->first);
} }
/* /*
* Kill off any zones which have stopped * Kill off any zones which have stopped
*/ */
while(!to_remove.empty()) { while (!to_remove.empty()) {
std::string rem = *to_remove.begin(); std::string rem = *to_remove.begin();
to_remove.erase(rem); to_remove.erase(rem);
zone = zones.find(rem); zone = zones.find(rem);
if(zone == zones.end()) { if (zone == zones.end()) {
//wtf... //wtf...
continue; continue;
} }
delete zone->second; delete zone->second;
zones.erase(rem); zones.erase(rem);
} }
};
EQ::EventLoop::Get().Process(); EQ::Timer process_timer(loop_fn);
Sleep(5); process_timer.Start(32, true);
}
EQ::EventLoop::Get().Run();
//try to be semi-nice about this... without waiting too long //try to be semi-nice about this... without waiting too long
zone = zones.begin(); zone = zones.begin();

View File

@ -289,14 +289,22 @@ int main(int argc, char **argv)
LogInfo("[Config] [Security] IsPasswordLoginAllowed [{0}]", server.options.IsPasswordLoginAllowed()); LogInfo("[Config] [Security] IsPasswordLoginAllowed [{0}]", server.options.IsPasswordLoginAllowed());
LogInfo("[Config] [Security] IsUpdatingInsecurePasswords [{0}]", server.options.IsUpdatingInsecurePasswords()); LogInfo("[Config] [Security] IsUpdatingInsecurePasswords [{0}]", server.options.IsUpdatingInsecurePasswords());
while (run_server) { auto loop_fn = [&](EQ::Timer* t) {
Timer::SetCurrentTime(); Timer::SetCurrentTime();
server.client_manager->Process();
EQ::EventLoop::Get().Process();
Sleep(5); if (!run_server) {
EQ::EventLoop::Get().Shutdown();
return;
} }
server.client_manager->Process();
};
EQ::Timer process_timer(loop_fn);
process_timer.Start(32, true);
EQ::EventLoop::Get().Run();
LogInfo("Server Shutdown"); LogInfo("Server Shutdown");
LogInfo("Client Manager Shutdown"); LogInfo("Client Manager Shutdown");

View File

@ -104,15 +104,24 @@ int main()
/* Load Looking For Guild Manager */ /* Load Looking For Guild Manager */
lfguildmanager.LoadDatabase(); lfguildmanager.LoadDatabase();
while (RunLoops) { auto loop_fn = [&](EQ::Timer* t) {
Timer::SetCurrentTime(); Timer::SetCurrentTime();
if (!RunLoops) {
EQ::EventLoop::Get().Shutdown();
return;
}
if (LFGuildExpireTimer.Check()) { if (LFGuildExpireTimer.Check()) {
lfguildmanager.ExpireEntries(); lfguildmanager.ExpireEntries();
} }
};
EQ::Timer process_timer(loop_fn);
process_timer.Start(32, true);
EQ::EventLoop::Get().Run();
EQ::EventLoop::Get().Process();
Sleep(5);
}
LogSys.CloseFileLogs(); LogSys.CloseFileLogs();
} }

View File

@ -371,8 +371,14 @@ int main(int argc, char **argv)
} }
); );
while (RunLoops) { auto loop_fn = [&](EQ::Timer* t) {
Timer::SetCurrentTime(); Timer::SetCurrentTime();
if (!RunLoops) {
EQ::EventLoop::Get().Shutdown();
return;
}
eqs = nullptr; eqs = nullptr;
//give the stream identifier a chance to do its work.... //give the stream identifier a chance to do its work....
@ -381,7 +387,7 @@ int main(int argc, char **argv)
//check the stream identifier for any now-identified streams //check the stream identifier for any now-identified streams
while ((eqsi = stream_identifier.PopIdentified())) { while ((eqsi = stream_identifier.PopIdentified())) {
//now that we know what patch they are running, start up their client object //now that we know what patch they are running, start up their client object
struct in_addr in{}; struct in_addr in {};
in.s_addr = eqsi->GetRemoteIP(); in.s_addr = eqsi->GetRemoteIP();
if (RuleB(World, UseBannedIPsTable)) { //Lieka: Check to see if we have the responsibility for blocking IPs. if (RuleB(World, UseBannedIPsTable)) { //Lieka: Check to see if we have the responsibility for blocking IPs.
LogInfo("Checking inbound connection [{}] against BannedIPs table", inet_ntoa(in)); LogInfo("Checking inbound connection [{}] against BannedIPs table", inet_ntoa(in));
@ -447,10 +453,13 @@ int main(int argc, char **argv)
); );
UpdateWindowTitle(window_title); UpdateWindowTitle(window_title);
} }
};
EQ::Timer process_timer(loop_fn);
process_timer.Start(32, true);
EQ::EventLoop::Get().Run();
EQ::EventLoop::Get().Process();
Sleep(5);
}
LogInfo("World main loop completed"); LogInfo("World main loop completed");
LogInfo("Shutting down zone connections (if any)"); LogInfo("Shutting down zone connections (if any)");
zoneserver_list.KillAll(); zoneserver_list.KillAll();