From 2decd9f875566b818a32d1bd8413956169650d19 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 17 May 2024 17:45:34 +0800 Subject: [PATCH] 1 --- server/gameserver/pbutils.cc | 11 +++++++---- server/gameserver/playermgr.cc | 3 +++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/server/gameserver/pbutils.cc b/server/gameserver/pbutils.cc index 67124b10..b1cadabe 100644 --- a/server/gameserver/pbutils.cc +++ b/server/gameserver/pbutils.cc @@ -2266,10 +2266,11 @@ void Human::ReJoin(long ip_saddr, int socket_handle) if (!IsPlayer()) { abort(); } - if (socket_handle == 0 && GetSocketHandle() != 0) { - A8_ABORT(); - } auto old_socket_handle = GetSocketHandle(); + if (SocketIsValid()) { + GGListener::Instance()->ForceCloseChildSocket(GetSocketHandle()); + PlayerMgr::Instance()->RemovePlayerBySocket(GetSocketHandle()); + } SetIpSaddr(ip_saddr); SetSocketHandle(socket_handle); room->frame_event.AddEnterGame(GetWeakPtrRef()); @@ -2280,7 +2281,9 @@ void Human::ReJoin(long ip_saddr, int socket_handle) PushJoinRoomMsg(); RefreshView(); room->NotifyUiUpdate(); - PlayerMgr::Instance()->ReBindSocket(AsPlayer()); + if (SocketIsValid()) { + PlayerMgr::Instance()->ReBindSocket(AsPlayer()); + } #ifdef MYDEBUG a8::XPrintf("ReJoin account_id:%s old_socket_handle:%d new_socket_handle:%d socket_handle:%d\n", { diff --git a/server/gameserver/playermgr.cc b/server/gameserver/playermgr.cc index 9574ba03..0f99b4a1 100644 --- a/server/gameserver/playermgr.cc +++ b/server/gameserver/playermgr.cc @@ -124,6 +124,9 @@ void PlayerMgr::DecAccountNum(const std::string& account_id) void PlayerMgr::ReBindSocket(Player* hum) { + if (!hum->SocketIsValid()) { + A8_ABORT(); + } #ifdef MYDEBUG a8::XPrintf("ReBindSocket account_id:%s socket_handle:%d\n", {