diff --git a/dMasterServer/MasterServer.cpp b/dMasterServer/MasterServer.cpp index e5a6f55..f16e791 100644 --- a/dMasterServer/MasterServer.cpp +++ b/dMasterServer/MasterServer.cpp @@ -47,9 +47,12 @@ namespace Game { bool shutdownSequenceStarted = false; void ShutdownSequence(); dLogger* SetupLogger(); +void StartAuthServer(); +void StartChatServer(); void HandlePacket(Packet* packet); std::map activeSessions; bool shouldShutdown = false; +SystemAddress chatServerMasterPeerSysAddr; int main(int argc, char** argv) { Diagnostics::SetProcessName("Master"); @@ -182,35 +185,12 @@ int main(int argc, char** argv) { //Depending on the config, start up servers: if (config.GetValue("prestart_servers") != "" && config.GetValue("prestart_servers") == "1") { -#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 + StartChatServer(); Game::im->GetInstance(0, false, 0)->SetIsReady(true); Game::im->GetInstance(1000, false, 0)->SetIsReady(true); -#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 + StartAuthServer(); } auto t = std::chrono::high_resolution_clock::now(); @@ -341,6 +321,10 @@ void HandlePacket(Packet* packet) { if (instance) { Game::im->RemoveInstance(instance); //Delete the old } + + if (packet->systemAddress == chatServerMasterPeerSysAddr && !shouldShutdown) { + StartChatServer(); + } } if (packet->data[0] == ID_CONNECTION_LOST) { @@ -353,6 +337,10 @@ void HandlePacket(Packet* packet) { Game::im->RemoveInstance(instance); //Delete the old //Game::im->GetInstance(zoneID.GetMapID(), false, 0); //Create the new } + + if (packet->systemAddress == chatServerMasterPeerSysAddr && !shouldShutdown) { + StartChatServer(); + } } 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); 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() { if (shutdownSequenceStarted) { return;