diff options
author | Shauren <shauren.trinity@gmail.com> | 2016-11-27 12:29:31 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2016-11-27 12:29:31 +0100 |
commit | e12e5f88ecd3cfbb2ead12823e0b2dfe94e7fd63 (patch) | |
tree | 1fc1c457e514e0b354f03e228b0448c788030782 /src | |
parent | 90070d59ea806be4d555097591db7ec7c24b2b75 (diff) |
Core/PacketIO: Fixed server queue display
Closes #18218
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Handlers/AuthHandler.cpp | 27 | ||||
-rw-r--r-- | src/server/game/Server/Packets/AuthenticationPackets.cpp | 24 | ||||
-rw-r--r-- | src/server/game/Server/Packets/AuthenticationPackets.h | 32 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Opcodes.cpp | 4 |
4 files changed, 59 insertions, 28 deletions
diff --git a/src/server/game/Handlers/AuthHandler.cpp b/src/server/game/Handlers/AuthHandler.cpp index 06c3952940b..e72400bad69 100644 --- a/src/server/game/Handlers/AuthHandler.cpp +++ b/src/server/game/Handlers/AuthHandler.cpp @@ -27,12 +27,7 @@ void WorldSession::SendAuthResponse(uint32 code, bool queued, uint32 queuePos) WorldPackets::Auth::AuthResponse response; response.Result = code; - if (queued) - { - response.WaitInfo = boost::in_place(); - response.WaitInfo->WaitCount = queuePos; - } - else if (code == ERROR_OK) + if (code == ERROR_OK) { response.SuccessInfo = boost::in_place(); @@ -53,21 +48,27 @@ void WorldSession::SendAuthResponse(uint32 code, bool queued, uint32 queuePos) response.SuccessInfo->AvailableRaces = &sObjectMgr->GetRaceExpansionRequirements(); } + if (queued) + { + response.WaitInfo = boost::in_place(); + response.WaitInfo->WaitCount = queuePos; + } + SendPacket(response.Write()); } void WorldSession::SendAuthWaitQue(uint32 position) { - WorldPackets::Auth::AuthResponse response; - response.Result = ERROR_OK; - if (position) { - response.WaitInfo = boost::in_place(); - response.WaitInfo->WaitCount = position; + WorldPackets::Auth::WaitQueueUpdate waitQueueUpdate; + waitQueueUpdate.WaitInfo.WaitCount = position; + waitQueueUpdate.WaitInfo.WaitTime = 0; + waitQueueUpdate.WaitInfo.HasFCM = false; + SendPacket(waitQueueUpdate.Write()); } - - SendPacket(response.Write()); + else + SendPacket(WorldPackets::Auth::WaitQueueFinish().Write()); } void WorldSession::SendClientCacheVersion(uint32 version) diff --git a/src/server/game/Server/Packets/AuthenticationPackets.cpp b/src/server/game/Server/Packets/AuthenticationPackets.cpp index b19ce9c16ad..fadc0caf6c3 100644 --- a/src/server/game/Server/Packets/AuthenticationPackets.cpp +++ b/src/server/game/Server/Packets/AuthenticationPackets.cpp @@ -73,6 +73,16 @@ void WorldPackets::Auth::AuthSession::Read() } } +ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Auth::AuthWaitInfo const& waitInfo) +{ + data << uint32(waitInfo.WaitCount); + data << uint32(waitInfo.WaitTime); + data.WriteBit(waitInfo.HasFCM); + data.FlushBits(); + + return data; +} + WorldPackets::Auth::AuthResponse::AuthResponse() : ServerPacket(SMSG_AUTH_RESPONSE, 132) { @@ -166,12 +176,14 @@ WorldPacket const* WorldPackets::Auth::AuthResponse::Write() } if (WaitInfo) - { - _worldPacket << uint32(WaitInfo->WaitCount); - _worldPacket << uint32(WaitInfo->WaitTime); - _worldPacket.WriteBit(WaitInfo->HasFCM); - _worldPacket.FlushBits(); - } + _worldPacket << *WaitInfo; + + return &_worldPacket; +} + +WorldPacket const* WorldPackets::Auth::WaitQueueUpdate::Write() +{ + _worldPacket << WaitInfo; return &_worldPacket; } diff --git a/src/server/game/Server/Packets/AuthenticationPackets.h b/src/server/game/Server/Packets/AuthenticationPackets.h index 785e99a341b..8d9712c57d8 100644 --- a/src/server/game/Server/Packets/AuthenticationPackets.h +++ b/src/server/game/Server/Packets/AuthenticationPackets.h @@ -99,6 +99,13 @@ namespace WorldPackets void Read() override; }; + struct AuthWaitInfo + { + uint32 WaitCount = 0; ///< position of the account in the login queue + uint32 WaitTime = 0; ///< Wait time in login queue in minutes, if sent queued and this value is 0 client displays "unknown time" + bool HasFCM = false; ///< true if the account has a forced character migration pending. @todo implement + }; + class AuthResponse final : public ServerPacket { public: @@ -146,13 +153,6 @@ namespace WorldPackets Optional<uint16> NumPlayersAlliance; ///< number of alliance players in this realm. @todo implement }; - struct AuthWaitInfo - { - uint32 WaitCount = 0; ///< position of the account in the login queue - uint32 WaitTime = 0; ///< Wait time in login queue in minutes, if sent queued and this value is 0 client displays "unknown time" - bool HasFCM = false; ///< true if the account has a forced character migration pending. @todo implement - }; - AuthResponse(); WorldPacket const* Write() override; @@ -162,6 +162,24 @@ namespace WorldPackets uint32 Result = 0; ///< the result of the authentication process, possible values are @ref BattlenetRpcErrorCode }; + class WaitQueueUpdate final : public ServerPacket + { + public: + WaitQueueUpdate() : ServerPacket(SMSG_WAIT_QUEUE_UPDATE, 4 + 4 + 1) { } + + WorldPacket const* Write() override; + + AuthWaitInfo WaitInfo; + }; + + class WaitQueueFinish final : public ServerPacket + { + public: + WaitQueueFinish() : ServerPacket(SMSG_WAIT_QUEUE_FINISH, 0) { } + + WorldPacket const* Write() override { return &_worldPacket; } + }; + enum class ConnectToSerial : uint32 { None = 0, diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 1017d5e3d67..5a573c81f19 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -1764,8 +1764,8 @@ void OpcodeTable::Initialize() DEFINE_SERVER_OPCODE_HANDLER(SMSG_VOID_STORAGE_FAILED, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_VOID_STORAGE_TRANSFER_CHANGES, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); DEFINE_SERVER_OPCODE_HANDLER(SMSG_VOID_TRANSFER_RESULT, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_WAIT_QUEUE_FINISH, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); - DEFINE_SERVER_OPCODE_HANDLER(SMSG_WAIT_QUEUE_UPDATE, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_WAIT_QUEUE_FINISH, STATUS_NEVER, CONNECTION_TYPE_REALM); + DEFINE_SERVER_OPCODE_HANDLER(SMSG_WAIT_QUEUE_UPDATE, STATUS_NEVER, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WARDEN_DATA, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WARGAME_REQUEST_SUCCESSFULLY_SENT_TO_OPPONENT, STATUS_UNHANDLED, CONNECTION_TYPE_REALM); DEFINE_SERVER_OPCODE_HANDLER(SMSG_WEATHER, STATUS_NEVER, CONNECTION_TYPE_INSTANCE); |