MasterServer now respawns ChatServer on crash

This commit is contained in:
Jonny 2021-12-20 10:08:57 +01:00
parent c8177563e9
commit dfb41c7c40

View File

@ -47,9 +47,12 @@ namespace Game {
bool shutdownSequenceStarted = false; bool shutdownSequenceStarted = false;
void ShutdownSequence(); void ShutdownSequence();
dLogger* SetupLogger(); dLogger* SetupLogger();
void StartAuthServer();
void StartChatServer();
void HandlePacket(Packet* packet); void HandlePacket(Packet* packet);
std::map<uint32_t, std::string> activeSessions; std::map<uint32_t, std::string> activeSessions;
bool shouldShutdown = false; bool shouldShutdown = false;
SystemAddress chatServerMasterPeerSysAddr;
int main(int argc, char** argv) { int main(int argc, char** argv) {
Diagnostics::SetProcessName("Master"); Diagnostics::SetProcessName("Master");
@ -182,35 +185,12 @@ int main(int argc, char** argv) {
//Depending on the config, start up servers: //Depending on the config, start up servers:
if (config.GetValue("prestart_servers") != "" && config.GetValue("prestart_servers") == "1") { if (config.GetValue("prestart_servers") != "" && config.GetValue("prestart_servers") == "1") {
#ifdef __APPLE__ StartChatServer();
//macOS doesn't need sudo to run on ports < 1024
system("./ChatServer&");
#elif _WIN32
system("start ./ChatServer.exe");
#else
if (std::atoi(Game::config->GetValue("use_sudo_chat").c_str())) {
system("sudo ./ChatServer&");
}
else {
system("./ChatServer&");
}
#endif
Game::im->GetInstance(0, false, 0)->SetIsReady(true); Game::im->GetInstance(0, false, 0)->SetIsReady(true);
Game::im->GetInstance(1000, false, 0)->SetIsReady(true); Game::im->GetInstance(1000, false, 0)->SetIsReady(true);
#ifdef __APPLE__ StartAuthServer();
system("./AuthServer&");
#elif _WIN32
system("start ./AuthServer.exe");
#else
if (std::atoi(Game::config->GetValue("use_sudo_auth").c_str())) {
system("sudo ./AuthServer&");
}
else {
system("./AuthServer&");
}
#endif
} }
auto t = std::chrono::high_resolution_clock::now(); auto t = std::chrono::high_resolution_clock::now();
@ -341,6 +321,10 @@ void HandlePacket(Packet* packet) {
if (instance) { if (instance) {
Game::im->RemoveInstance(instance); //Delete the old Game::im->RemoveInstance(instance); //Delete the old
} }
if (packet->systemAddress == chatServerMasterPeerSysAddr && !shouldShutdown) {
StartChatServer();
}
} }
if (packet->data[0] == ID_CONNECTION_LOST) { if (packet->data[0] == ID_CONNECTION_LOST) {
@ -353,6 +337,10 @@ void HandlePacket(Packet* packet) {
Game::im->RemoveInstance(instance); //Delete the old Game::im->RemoveInstance(instance); //Delete the old
//Game::im->GetInstance(zoneID.GetMapID(), false, 0); //Create the new //Game::im->GetInstance(zoneID.GetMapID(), false, 0); //Create the new
} }
if (packet->systemAddress == chatServerMasterPeerSysAddr && !shouldShutdown) {
StartChatServer();
}
} }
if (packet->data[1] == MASTER) { if (packet->data[1] == MASTER) {
@ -441,6 +429,14 @@ void HandlePacket(Packet* packet) {
} }
} }
if (theirServerType == ServerType::Chat) {
SystemAddress copy;
copy.binaryAddress = packet->systemAddress.binaryAddress;
copy.port = packet->systemAddress.port;
chatServerMasterPeerSysAddr = copy;
}
Game::logger->Log("MasterServer", "Received server info, instance: %i port: %i\n", theirInstanceID, theirPort); Game::logger->Log("MasterServer", "Received server info, instance: %i port: %i\n", theirInstanceID, theirPort);
break; break;
@ -660,6 +656,37 @@ void HandlePacket(Packet* packet) {
} }
} }
void StartChatServer() {
#ifdef __APPLE__
//macOS doesn't need sudo to run on ports < 1024
system("./ChatServer&");
#elif _WIN32
system("start ./ChatServer.exe");
#else
if (std::atoi(Game::config->GetValue("use_sudo_chat").c_str())) {
system("sudo ./ChatServer&");
}
else {
system("./ChatServer&");
}
#endif
}
void StartAuthServer() {
#ifdef __APPLE__
system("./AuthServer&");
#elif _WIN32
system("start ./AuthServer.exe");
#else
if (std::atoi(Game::config->GetValue("use_sudo_auth").c_str())) {
system("sudo ./AuthServer&");
}
else {
system("./AuthServer&");
}
#endif
}
void ShutdownSequence() { void ShutdownSequence() {
if (shutdownSequenceStarted) { if (shutdownSequenceStarted) {
return; return;