aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2016-11-27 12:29:31 +0100
committerShauren <shauren.trinity@gmail.com>2016-11-27 12:29:31 +0100
commite12e5f88ecd3cfbb2ead12823e0b2dfe94e7fd63 (patch)
tree1fc1c457e514e0b354f03e228b0448c788030782 /src
parent90070d59ea806be4d555097591db7ec7c24b2b75 (diff)
Core/PacketIO: Fixed server queue display
Closes #18218
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Handlers/AuthHandler.cpp27
-rw-r--r--src/server/game/Server/Packets/AuthenticationPackets.cpp24
-rw-r--r--src/server/game/Server/Packets/AuthenticationPackets.h32
-rw-r--r--src/server/game/Server/Protocol/Opcodes.cpp4
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);