Save connected players to DB when gracefully terminating the server.

This commit is contained in:
dongresource 2020-10-02 19:31:47 +02:00
parent 8a144a359f
commit 35a2110698
3 changed files with 11 additions and 1 deletions

View File

@ -47,9 +47,13 @@ void CNShardServer::keepAliveTimer(CNServer* serv, time_t currTime) {
} }
void CNShardServer::periodicSaveTimer(CNServer* serv, time_t currTime) { void CNShardServer::periodicSaveTimer(CNServer* serv, time_t currTime) {
std::cout << "[INFO] Saving players to DB..." << std::endl;
for (auto& pair : PlayerManager::players) { for (auto& pair : PlayerManager::players) {
Database::updatePlayer(pair.second.plr); Database::updatePlayer(pair.second.plr);
} }
std::cout << "[INFO] Done." << std::endl;
} }
void CNShardServer::newConnection(CNSocket* cns) { void CNShardServer::newConnection(CNSocket* cns) {
@ -85,6 +89,12 @@ void CNShardServer::killConnection(CNSocket *cns) {
_killConnection(cns); _killConnection(cns);
} }
// flush the DB when terminating the server
void CNShardServer::kill() {
periodicSaveTimer(nullptr, 0);
CNServer::kill();
}
void CNShardServer::onStep() { void CNShardServer::onStep() {
time_t currTime = getTime(); time_t currTime = getTime();

View File

@ -25,5 +25,6 @@ public:
void newConnection(CNSocket* cns); void newConnection(CNSocket* cns);
void killConnection(CNSocket* cns); void killConnection(CNSocket* cns);
void kill();
void onStep(); void onStep();
}; };

View File

@ -244,7 +244,6 @@ void TableData::loadPaths(int* nextId) {
auto sliderPoint = _sliderPoint.value(); auto sliderPoint = _sliderPoint.value();
if (sliderPoint["stop"] && sliders % 2 == 0) { // check if this point in the circuit is a stop if (sliderPoint["stop"] && sliders % 2 == 0) { // check if this point in the circuit is a stop
// spawn a slider // spawn a slider
std::cout << "bus ID was " << *nextId << std::endl;
BaseNPC* slider = new BaseNPC(sliderPoint["iX"], sliderPoint["iY"], sliderPoint["iZ"], 1, (*nextId)++, NPC_BUS); BaseNPC* slider = new BaseNPC(sliderPoint["iX"], sliderPoint["iY"], sliderPoint["iZ"], 1, (*nextId)++, NPC_BUS);
NPCManager::NPCs[slider->appearanceData.iNPC_ID] = slider; NPCManager::NPCs[slider->appearanceData.iNPC_ID] = slider;
NPCManager::updateNPCPosition(slider->appearanceData.iNPC_ID, slider->appearanceData.iX, slider->appearanceData.iY, slider->appearanceData.iZ); NPCManager::updateNPCPosition(slider->appearanceData.iNPC_ID, slider->appearanceData.iX, slider->appearanceData.iY, slider->appearanceData.iZ);