From 31ef03610d9b79bee3accf5b406f79e42b0edc6a Mon Sep 17 00:00:00 2001 From: CPunch Date: Thu, 17 Sep 2020 21:41:09 -0500 Subject: [PATCH] temp fix and small refactor --- src/CNShardServer.cpp | 15 ++++++--------- src/ChunkManager.cpp | 2 -- src/PlayerManager.cpp | 3 +++ 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/CNShardServer.cpp b/src/CNShardServer.cpp index c0c8cd7..e2aefc2 100644 --- a/src/CNShardServer.cpp +++ b/src/CNShardServer.cpp @@ -34,9 +34,7 @@ void CNShardServer::handlePacket(CNSocket* sock, CNPacketData* data) { } void CNShardServer::keepAliveTimer(CNServer* serv, time_t currTime) { - auto cachedPlayers = PlayerManager::players; - - for (auto& pair : cachedPlayers) { + for (auto& pair : PlayerManager::players) { if (pair.second.lastHeartbeat != 0 && currTime - pair.second.lastHeartbeat > settings::TIMEOUT) { // if the client hasn't responded in 60 seconds, its a dead connection so throw it out pair.first->kill(); @@ -49,9 +47,8 @@ void CNShardServer::keepAliveTimer(CNServer* serv, time_t currTime) { } void CNShardServer::periodicSaveTimer(CNServer* serv, time_t currTime) { - auto cachedPlayers = PlayerManager::players; - - for (auto& pair : cachedPlayers) { + std::cout << "players size: " << PlayerManager::players.size() << std::endl; + for (auto& pair : PlayerManager::players) { Database::updatePlayer(pair.second.plr); } } @@ -65,13 +62,13 @@ void CNShardServer::killConnection(CNSocket* cns) { if (PlayerManager::players.find(cns) == PlayerManager::players.end()) return; + int64_t key = PlayerManager::getPlayer(cns)->SerialKey; + // save player to DB Database::updatePlayer(PlayerManager::players[cns].plr); - - // remove from CNSharedData - int64_t key = PlayerManager::getPlayer(cns)->SerialKey; PlayerManager::removePlayer(cns); + // remove from CNSharedData CNSharedData::erasePlayer(key); } diff --git a/src/ChunkManager.cpp b/src/ChunkManager.cpp index 5e2b92b..c454a93 100644 --- a/src/ChunkManager.cpp +++ b/src/ChunkManager.cpp @@ -43,8 +43,6 @@ void ChunkManager::addPlayer(int posX, int posY, CNSocket* sock) { Chunk* chunk = chunks[pos]; chunk->players.insert(sock); - - // TODO: update view for all players in surrounding chunks } std::pair ChunkManager::grabChunk(int posX, int posY) { diff --git a/src/PlayerManager.cpp b/src/PlayerManager.cpp index 2222667..2c26d14 100644 --- a/src/PlayerManager.cpp +++ b/src/PlayerManager.cpp @@ -96,6 +96,9 @@ void PlayerManager::removePlayerFromChunks(std::vector chunks, CNSocket* exitPlayer.iID = players[otherSock].plr->iID; sock->sendPacket((void*)&exitPlayer, P_FE2CL_PC_EXIT, sizeof(sP_FE2CL_PC_EXIT)); } + + // temp-fix for weird edgecase + chunk->players.erase(sock); } }