diff --git a/src/net/Types.hpp b/src/net/Types.hpp index c7c408b..6154722 100644 --- a/src/net/Types.hpp +++ b/src/net/Types.hpp @@ -1103,7 +1103,7 @@ enum NETSTATE { NS_UNINITIALIZED = 0, NS_INITIALIZING = 1, NS_INITIALIZED = 2, - NS_STATE_3 = 3, + NS_DISCONNECTING = 3, NS_CONNECTING = 4, NS_CONNECTED = 5, }; diff --git a/src/net/connection/ClientConnection.cpp b/src/net/connection/ClientConnection.cpp index 431e505..c21864a 100644 --- a/src/net/connection/ClientConnection.cpp +++ b/src/net/connection/ClientConnection.cpp @@ -160,8 +160,14 @@ void ClientConnection::Connect() { } int32_t ClientConnection::Disconnect() { + this->NetClient::Disconnect(); + + this->m_connected = 0; + // TODO - return 0; + // WardenClient_Destroy(); + + return 1; } void ClientConnection::GetCharacterList() { diff --git a/src/net/connection/NetClient.cpp b/src/net/connection/NetClient.cpp index c8060fc..d01c8ff 100644 --- a/src/net/connection/NetClient.cpp +++ b/src/net/connection/NetClient.cpp @@ -165,6 +165,41 @@ void NetClient::DelRef() { } } +void NetClient::Disconnect() { + auto redirectConnection = this->m_redirectConnection; + + if (redirectConnection) { + // TODO + // redirectConnection->SetResponse(0, 0); + + redirectConnection->Disconnect(); + redirectConnection->Release(); + + this->m_redirectConnection = nullptr; + } + + auto serverConnection = this->m_serverConnection; + + if (this->m_netState == NS_CONNECTED) { + this->m_netState = NS_DISCONNECTING; + + serverConnection->Disconnect(); + } else { + // TODO + // serverConnection->SetResponse(0, 0); + + serverConnection->Disconnect(); + + // TODO + // this->m_netEventQueue->Clear(); + + serverConnection->Release(); + + this->m_serverConnection = STORM_NEW(WowConnection)(this, nullptr); + this->m_netState = NS_INITIALIZED; + } +} + void NetClient::EnableEncryption(WowConnection* conn, uint8_t* seed, uint8_t seedLen) { conn->SetEncryptionKey( this->m_loginData.m_sessionKey, diff --git a/src/net/connection/NetClient.hpp b/src/net/connection/NetClient.hpp index 7564e33..8e04b22 100644 --- a/src/net/connection/NetClient.hpp +++ b/src/net/connection/NetClient.hpp @@ -64,6 +64,7 @@ class NetClient : public WowConnectionResponse { void Connect(const char* addrStr); int32_t ConnectInternal(const char* host, uint16_t port); void DelRef(); + void Disconnect(); void EnableEncryption(WowConnection* conn, uint8_t* seed, uint8_t seedLen); bool GetDelete(); const LoginData& GetLoginData();