mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2024-11-22 05:27:19 +00:00
Merge pull request #276 from cuzitsjonny/main
ChatServer respawn after crash
This commit is contained in:
commit
1006bd17e3
@ -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;
|
||||||
|
@ -73,6 +73,7 @@ namespace Game {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool chatDisabled = false;
|
bool chatDisabled = false;
|
||||||
|
bool chatConnected = false;
|
||||||
bool worldShutdownSequenceStarted = false;
|
bool worldShutdownSequenceStarted = false;
|
||||||
bool worldShutdownSequenceComplete = false;
|
bool worldShutdownSequenceComplete = false;
|
||||||
void WorldShutdownSequence();
|
void WorldShutdownSequence();
|
||||||
@ -212,6 +213,7 @@ int main(int argc, char** argv) {
|
|||||||
Packet* packet = nullptr;
|
Packet* packet = nullptr;
|
||||||
int framesSinceLastFlush = 0;
|
int framesSinceLastFlush = 0;
|
||||||
int framesSinceMasterDisconnect = 0;
|
int framesSinceMasterDisconnect = 0;
|
||||||
|
int framesSinceChatDisconnect = 0;
|
||||||
int framesSinceLastUsersSave = 0;
|
int framesSinceLastUsersSave = 0;
|
||||||
int framesSinceLastSQLPing = 0;
|
int framesSinceLastSQLPing = 0;
|
||||||
int framesSinceLastUser = 0;
|
int framesSinceLastUser = 0;
|
||||||
@ -319,6 +321,19 @@ int main(int argc, char** argv) {
|
|||||||
}
|
}
|
||||||
else framesSinceMasterDisconnect = 0;
|
else framesSinceMasterDisconnect = 0;
|
||||||
|
|
||||||
|
// Check if we're still connected to chat:
|
||||||
|
if (!chatConnected) {
|
||||||
|
framesSinceChatDisconnect++;
|
||||||
|
|
||||||
|
// Attempt to reconnect every 30 seconds.
|
||||||
|
if (framesSinceChatDisconnect >= 2000) {
|
||||||
|
framesSinceChatDisconnect = 0;
|
||||||
|
|
||||||
|
Game::chatServer->Connect(masterIP.c_str(), chatPort, "3.25 ND1", 8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else framesSinceChatDisconnect = 0;
|
||||||
|
|
||||||
//In world we'd update our other systems here.
|
//In world we'd update our other systems here.
|
||||||
|
|
||||||
if (zoneID != 0 && deltaTime > 0.0f) {
|
if (zoneID != 0 && deltaTime > 0.0f) {
|
||||||
@ -559,11 +574,15 @@ dLogger * SetupLogger(int zoneID, int instanceID) {
|
|||||||
void HandlePacketChat(Packet* packet) {
|
void HandlePacketChat(Packet* packet) {
|
||||||
if (packet->data[0] == ID_DISCONNECTION_NOTIFICATION || packet->data[0] == ID_CONNECTION_LOST) {
|
if (packet->data[0] == ID_DISCONNECTION_NOTIFICATION || packet->data[0] == ID_CONNECTION_LOST) {
|
||||||
Game::logger->Log("WorldServer", "Lost our connection to chat.\n");
|
Game::logger->Log("WorldServer", "Lost our connection to chat.\n");
|
||||||
|
|
||||||
|
chatConnected = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (packet->data[0] == ID_CONNECTION_REQUEST_ACCEPTED) {
|
if (packet->data[0] == ID_CONNECTION_REQUEST_ACCEPTED) {
|
||||||
Game::logger->Log("WorldServer", "Established connection to chat\n");
|
Game::logger->Log("WorldServer", "Established connection to chat\n");
|
||||||
Game::chatSysAddr = packet->systemAddress;
|
Game::chatSysAddr = packet->systemAddress;
|
||||||
|
|
||||||
|
chatConnected = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (packet->data[0] == ID_USER_PACKET_ENUM) {
|
if (packet->data[0] == ID_USER_PACKET_ENUM) {
|
||||||
|
Loading…
Reference in New Issue
Block a user