From e3d60d70e86971a014a3cdbd44f1d5a8c2f02c15 Mon Sep 17 00:00:00 2001 From: Tristan Cormier Date: Tue, 6 Jan 2026 17:32:10 -0500 Subject: [PATCH] feat(connection): implement character deletion message handlers --- src/net/connection/ClientConnection.cpp | 4 ++++ src/net/connection/ClientConnection.hpp | 1 + src/net/connection/RealmConnection.cpp | 11 ++++++++++- src/net/connection/RealmConnection.hpp | 2 ++ 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/net/connection/ClientConnection.cpp b/src/net/connection/ClientConnection.cpp index 28b9a96..66434c0 100644 --- a/src/net/connection/ClientConnection.cpp +++ b/src/net/connection/ClientConnection.cpp @@ -104,6 +104,10 @@ void ClientConnection::GetRealmList() { } } +void ClientConnection::HandleCharacterDelete(uint8_t result) { + this->Complete(result == 71, result); +} + int32_t ClientConnection::HandleConnect() { this->Complete(1, 5); diff --git a/src/net/connection/ClientConnection.hpp b/src/net/connection/ClientConnection.hpp index f96a16f..c24fa3a 100644 --- a/src/net/connection/ClientConnection.hpp +++ b/src/net/connection/ClientConnection.hpp @@ -22,6 +22,7 @@ class ClientConnection : public RealmConnection { // Virtual member functions virtual int32_t HandleConnect(); + virtual void HandleCharacterDelete(uint8_t result); // Member functions ClientConnection(RealmResponse* realmResponse) diff --git a/src/net/connection/RealmConnection.cpp b/src/net/connection/RealmConnection.cpp index e743658..a60549e 100644 --- a/src/net/connection/RealmConnection.cpp +++ b/src/net/connection/RealmConnection.cpp @@ -30,7 +30,7 @@ int32_t RealmConnection::MessageHandler(void* param, NETMESSAGE msgId, uint32_t } case SMSG_DELETE_CHAR: { - // TODO + result = connection->DeleteCharHandler(msgId, time, msg); break; } @@ -294,6 +294,15 @@ int32_t RealmConnection::HandleCharEnum(uint32_t msgId, uint32_t time, CDataStor return 1; } +int32_t RealmConnection::DeleteCharHandler(uint32_t msgId, uint32_t time, CDataStore* msg) { + uint8_t result; + msg->Get(result); + + this->HandleCharacterDelete(result); + + return 1; +} + void RealmConnection::RequestCharacterEnum() { CDataStore msg; diff --git a/src/net/connection/RealmConnection.hpp b/src/net/connection/RealmConnection.hpp index b4eaa10..332401b 100644 --- a/src/net/connection/RealmConnection.hpp +++ b/src/net/connection/RealmConnection.hpp @@ -46,11 +46,13 @@ class RealmConnection : public NetClient { // Virtual member functions virtual int32_t HandleAuthChallenge(AuthenticationChallenge* challenge); + virtual void HandleCharacterDelete(uint8_t result) = 0; // Member functions RealmConnection(RealmResponse* realmResponse); int32_t HandleAuthResponse(uint32_t msgId, uint32_t time, CDataStore* msg); int32_t HandleCharEnum(uint32_t msgId, uint32_t time, CDataStore* msg); + int32_t DeleteCharHandler(uint32_t msgId, uint32_t time, CDataStore* msg); void RequestCharacterEnum(); void RequestCharacterLogin(uint64_t guid, int32_t a2); void SetSelectedRealm(uint32_t a2, uint32_t a3, uint32_t a4);