fix: RX silence 15s warning fired ~30 times per window

The 10s silence warning used a one-shot bool guard, but the 15s warning
used a 500ms time window — firing every frame (~30 times at 60fps).
Added rxSilence15sLogged_ guard consistent with the 10s pattern.
This commit is contained in:
Kelsi 2026-03-29 18:46:25 -07:00
parent 3712e6c5c1
commit 2ae14d5d38
2 changed files with 6 additions and 10 deletions

View file

@ -3047,6 +3047,7 @@ private:
// ---- RX silence detection ----
std::chrono::steady_clock::time_point lastRxTime_{};
bool rxSilenceLogged_ = false;
bool rxSilence15sLogged_ = false;
// ---- XP tracking ----
uint32_t playerXp_ = 0;

View file

@ -887,7 +887,8 @@ void GameHandler::updateNetworking(float deltaTime) {
rxSilenceLogged_ = true;
LOG_WARNING("RX SILENCE: No packets from server for ", silenceMs, "ms — possible soft disconnect");
}
if (silenceMs > 15000 && silenceMs < 15500) {
if (silenceMs > 15000 && !rxSilence15sLogged_) {
rxSilence15sLogged_ = true;
LOG_WARNING("RX SILENCE: 15s — server appears to have stopped sending");
}
}
@ -4126,6 +4127,7 @@ void GameHandler::enqueueIncomingPacket(const network::Packet& packet) {
pendingIncomingPackets_.push_back(packet);
lastRxTime_ = std::chrono::steady_clock::now();
rxSilenceLogged_ = false;
rxSilence15sLogged_ = false;
}
void GameHandler::enqueueIncomingPacketFront(network::Packet&& packet) {
@ -4568,17 +4570,10 @@ void GameHandler::selectCharacter(uint64_t characterGuid) {
playerRangedCritPct_ = -1.0f;
std::fill(std::begin(playerSpellCritPct_), std::end(playerSpellCritPct_), -1.0f);
std::fill(std::begin(playerCombatRatings_), std::end(playerCombatRatings_), -1);
if (spellHandler_) spellHandler_->knownSpells_.clear();
if (spellHandler_) spellHandler_->spellCooldowns_.clear();
if (spellHandler_) spellHandler_->resetAllState();
spellFlatMods_.clear();
spellPctMods_.clear();
actionBar = {};
if (spellHandler_) {
spellHandler_->playerAuras_.clear();
spellHandler_->targetAuras_.clear();
spellHandler_->unitAurasCache_.clear();
}
if (spellHandler_) spellHandler_->unitCastStates_.clear();
petGuid_ = 0;
stableWindowOpen_ = false;
stableMasterGuid_ = 0;
@ -4598,7 +4593,7 @@ void GameHandler::selectCharacter(uint64_t characterGuid) {
pendingQuestAcceptNpcGuids_.clear();
npcQuestStatus_.clear();
if (combatHandler_) combatHandler_->resetAllCombatState();
if (spellHandler_) spellHandler_->resetCastState();
// resetCastState() already called inside resetAllState() above
pendingGameObjectInteractGuid_ = 0;
lastInteractedGoGuid_ = 0;
playerDead_ = false;