diff --git a/server/imserver/playermgr.cc b/server/imserver/playermgr.cc index d1a78ff..634ae08 100644 --- a/server/imserver/playermgr.cc +++ b/server/imserver/playermgr.cc @@ -49,7 +49,7 @@ void PlayerMgr::_CMLogin(f8::MsgHdr& hdr, const cs::CMLogin& msg) return; } f8::MsgHdr* new_hdr = hdr.Clone(); - pending_socket_hash_[hdr.socket_handle] = new_hdr; + pending_socket_hash_[hdr.socket_handle] = std::make_tuple(msg.account_id(), new_hdr); pending_account_hash_[msg.account_id()] = new_hdr; AsyncLogin1(msg); } @@ -125,7 +125,7 @@ void PlayerMgr::RemovePlayerBySocket(int socket_handle) f8::MsgHdr* PlayerMgr::GetHdrBySocket(int socket_handle) { auto itr = pending_socket_hash_.find(socket_handle); - return itr != pending_socket_hash_.end() ? itr->second : nullptr; + return itr != pending_socket_hash_.end() ? std::get<1>(itr->second) : nullptr; } f8::MsgHdr* PlayerMgr::GetHdrByAccountId(const std::string& account_id) @@ -270,10 +270,7 @@ void PlayerMgr::AsyncLoginOnOk(const std::string& account_id, } pending_socket_hash_.erase(hdr->socket_handle); pending_account_hash_.erase(account_id); - if (hdr->buf) { - free((void*)hdr->buf); - } - free((void*)hdr); + f8::MsgHdr::Destroy(hdr); } } @@ -284,22 +281,18 @@ void PlayerMgr::AsyncLoginOnError(const std::string& account_id, int step, if (hdr) { pending_socket_hash_.erase(hdr->socket_handle); pending_account_hash_.erase(account_id); - if (hdr->buf) { - free((void*)hdr->buf); - } - free((void*)hdr); + f8::MsgHdr::Destroy(hdr); } } void PlayerMgr::OnClientSocketDisconnect(int socket_handle) { { - f8::MsgHdr* hdr = GetHdrBySocket(socket_handle); - if (hdr) { - if (hdr->buf) { - free((void*)hdr->buf); - } - free((void*)hdr); + auto itr = pending_socket_hash_.find(socket_handle); + if (itr != pending_socket_hash_.end()) { + pending_account_hash_.erase(std::get<0>(itr->second)); + f8::MsgHdr::Destroy(std::get<1>(itr->second)); + pending_socket_hash_.erase(itr); } } { diff --git a/server/imserver/playermgr.h b/server/imserver/playermgr.h index 4fe5132..cd651a2 100644 --- a/server/imserver/playermgr.h +++ b/server/imserver/playermgr.h @@ -60,6 +60,6 @@ class PlayerMgr : public a8::Singleton std::map socket_hash_; std::map accountid_hash_; - std::map pending_socket_hash_; + std::map> pending_socket_hash_; std::map pending_account_hash_; };