mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2024-11-25 15:07:28 +00:00
MasterServer now respawns ChatServer on crash
This commit is contained in:
parent
c8177563e9
commit
dfb41c7c40
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user