diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Server/WorldSession.cpp | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index e3be227df53..157e680e529 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -344,6 +344,8 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater) uint32 processedPackets = 0; time_t currentTime = GameTime::GetGameTime(); + constexpr uint32 MAX_PROCESSED_PACKETS_IN_SAME_WORLDSESSION_UPDATE = 100; + while (m_Socket[CONNECTION_TYPE_REALM] && _recvQueue.next(packet, updater)) { OpcodeClient opcode = static_cast<OpcodeClient>(packet->GetOpcode()); @@ -373,6 +375,8 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater) sScriptMgr->OnPacketReceive(this, *packet); opHandle->Call(this, *packet); } + else + processedPackets = MAX_PROCESSED_PACKETS_IN_SAME_WORLDSESSION_UPDATE; // break out of packet processing loop // lag can cause STATUS_LOGGEDIN opcodes to arrive after the player started a transfer break; case STATUS_LOGGEDIN_OR_RECENTLY_LOGGOUT: @@ -385,6 +389,8 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater) sScriptMgr->OnPacketReceive(this, *packet); opHandle->Call(this, *packet); } + else + processedPackets = MAX_PROCESSED_PACKETS_IN_SAME_WORLDSESSION_UPDATE; // break out of packet processing loop break; case STATUS_TRANSFER: if (!_player) @@ -396,6 +402,8 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater) sScriptMgr->OnPacketReceive(this, *packet); opHandle->Call(this, *packet); } + else + processedPackets = MAX_PROCESSED_PACKETS_IN_SAME_WORLDSESSION_UPDATE; // break out of packet processing loop break; case STATUS_AUTHED: // prevent cheating with skip queue wait @@ -415,6 +423,8 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater) sScriptMgr->OnPacketReceive(this, *packet); opHandle->Call(this, *packet); } + else + processedPackets = MAX_PROCESSED_PACKETS_IN_SAME_WORLDSESSION_UPDATE; // break out of packet processing loop break; case STATUS_NEVER: TC_LOG_ERROR("network.opcode", "Received not allowed opcode %s from %s", GetOpcodeNameForLogging(static_cast<OpcodeClient>(packet->GetOpcode())).c_str() @@ -459,7 +469,6 @@ bool WorldSession::Update(uint32 diff, PacketFilter& updater) deletePacket = true; -#define MAX_PROCESSED_PACKETS_IN_SAME_WORLDSESSION_UPDATE 100 processedPackets++; //process only a max amout of packets in 1 Update() call. |