diff options
author | Machiavelli <none@none> | 2010-04-23 12:56:16 +0200 |
---|---|---|
committer | Machiavelli <none@none> | 2010-04-23 12:56:16 +0200 |
commit | c4e4486903a57bca1bcfb438c75e4ee7a806b67c (patch) | |
tree | 905081caadad164ebb87fc14f2d586737d7388da /src/game/WorldSocket.cpp | |
parent | b142ae155e88677a82669df383f3d54e651b1898 (diff) |
Properly deregister WorldSocket connections in case of reaching socket timeout time.
--HG--
branch : trunk
Diffstat (limited to 'src/game/WorldSocket.cpp')
-rw-r--r-- | src/game/WorldSocket.cpp | 35 |
1 files changed, 15 insertions, 20 deletions
diff --git a/src/game/WorldSocket.cpp b/src/game/WorldSocket.cpp index c9e22ba85dd..ce638cf2680 100644 --- a/src/game/WorldSocket.cpp +++ b/src/game/WorldSocket.cpp @@ -110,8 +110,7 @@ m_OutBufferSize (65536), m_OutActive (false), m_Seed (static_cast<uint32> (rand32 ())), m_OverSpeedPings (0), -m_LastPingTime (ACE_Time_Value::zero), -m_TimeOutTime (0) +m_LastPingTime (ACE_Time_Value::zero) { reference_counting_policy ().value (ACE_Event_Handler::Reference_Counting_Policy::ENABLED); } @@ -412,10 +411,6 @@ int WorldSocket::Update (void) if (closing_) return -1; - if (m_TimeOutTime && - time(NULL) >= m_TimeOutTime) - return -1; - if (m_OutActive || m_OutBuffer->length () == 0) return 0; @@ -665,22 +660,22 @@ int WorldSocket::ProcessIncoming (WorldPacket* new_pct) { ACE_GUARD_RETURN (LockType, Guard, m_SessionLock, -1); - /* The m_TimeOutTime measure is put in to be able to automatically disconnect connections - that are sitting idle on the character select screen. After a period of being AFK in the realm, - the client will be automatically sent back to the character selection screen. In order to pick up - the idle connections and prevent they are sitting there, taking up slots for the realm, we'll check if the packet - that was sent is CMSG_CHAR_ENUM and initiate the timeout timer that will be checked on WorldSocket::Update. - */ - if (opcode == CMSG_CHAR_ENUM) - m_TimeOutTime = time(NULL) + sWorld.getConfig(CONFIG_SOCKET_TIMEOUTTIME) / IN_MILISECONDS; - /* If the packet is CMSG_PLAYER_LOGIN opcode, it means our connection is not idle, we're logging into the world. - Until we receive our next CMSG_CHAR_ENUM packet, we can disregard the timeout timer. - */ - else if (opcode == CMSG_PLAYER_LOGIN) - m_TimeOutTime = 0; - if (m_Session != NULL) { + /* The m_TimeOutTime measure is put in to be able to automatically disconnect connections + that are sitting idle on the character select screen. After a period of being AFK in the realm, + the client will be automatically sent back to the character selection screen. In order to pick up + the idle connections and prevent they are sitting there, taking up slots for the realm, we'll check if the packet + that was sent is CMSG_CHAR_ENUM and initiate the timeout timer that will be checked on WorldSocket::Update. + */ + if (opcode == CMSG_CHAR_ENUM) + m_Session->UpdateTimeOutTime(true); + /* If the packet is CMSG_PLAYER_LOGIN opcode, it means our connection is not idle, we're logging into the world. + Until we receive our next CMSG_CHAR_ENUM packet, we can disregard the timeout timer. + */ + else if (opcode == CMSG_PLAYER_LOGIN) + m_Session->UpdateTimeOutTime(false); + // OK ,give the packet to WorldSession aptr.release (); // WARNINIG here we call it with locks held. |