diff --git a/src/net/grunt/ClientLink.cpp b/src/net/grunt/ClientLink.cpp index 31c681c..b0ac7a9 100644 --- a/src/net/grunt/ClientLink.cpp +++ b/src/net/grunt/ClientLink.cpp @@ -39,6 +39,14 @@ Grunt::ClientLink::ClientLink(Grunt::ClientResponse& clientResponse) { } } +Grunt::ClientLink::~ClientLink() { + // TODO + + this->Shutdown(); + + // TODO +} + void Grunt::ClientLink::Call() { // TODO // this->CheckExpired(false); @@ -758,6 +766,20 @@ void Grunt::ClientLink::SetState(STATE state) { this->m_critSect.Leave(); } +void Grunt::ClientLink::Shutdown() { + this->m_critSect.Enter(); + + if (this->m_connection) { + this->m_connection->Disconnect(); + // TODO this->m_connection->SetResponse(nullptr, false); + this->m_connection->Release(); + + this->m_connection = nullptr; + } + + this->m_critSect.Leave(); +} + void Grunt::ClientLink::WCCantConnect(WowConnection* conn, uint32_t timeStamp, NETCONNADDR* addr) { // TODO } diff --git a/src/net/grunt/ClientLink.hpp b/src/net/grunt/ClientLink.hpp index 8f0923c..1005f8a 100644 --- a/src/net/grunt/ClientLink.hpp +++ b/src/net/grunt/ClientLink.hpp @@ -64,6 +64,7 @@ class Grunt::ClientLink : public WowConnectionResponse, Grunt::Pending, Grunt::T uint8_t m_reconnectSessionKey[40]; // Virtual member functions + virtual ~ClientLink(); virtual void WCMessageReady(WowConnection *conn, uint32_t timeStamp, CDataStore* msg) {}; virtual void WCConnected(WowConnection* conn, WowConnection* inbound, uint32_t timeStamp, const NETCONNADDR* addr); virtual void WCCantConnect(WowConnection* conn, uint32_t timeStamp, NETCONNADDR* addr); @@ -88,6 +89,7 @@ class Grunt::ClientLink : public WowConnectionResponse, Grunt::Pending, Grunt::T void ProveVersion(const uint8_t* versionChecksum); void Send(CDataStore& msg); void SetState(STATE state); + void Shutdown(); }; #endif