优化断线重连

This commit is contained in:
aozhiwei 2020-08-11 15:56:44 +08:00
parent 74bd5e36f5
commit 475e739edb
5 changed files with 17 additions and 4 deletions

View File

@ -909,6 +909,10 @@ void Player::ProcPrepareItems2(const ::google::protobuf::RepeatedPtrField< cs::M
void Player::_CMReconnect(f8::MsgHdr& hdr, const cs::CMReconnect& msg) void Player::_CMReconnect(f8::MsgHdr& hdr, const cs::CMReconnect& msg)
{ {
int old_socket_handle = socket_handle;
if (socket_handle != 0) {
PlayerMgr::Instance()->RemovePlayerBySocket(socket_handle);
}
socket_handle = hdr.socket_handle; socket_handle = hdr.socket_handle;
TouchAllLayerHumanList TouchAllLayerHumanList
( (
@ -923,6 +927,13 @@ void Player::_CMReconnect(f8::MsgHdr& hdr, const cs::CMReconnect& msg)
respmsg.set_errmsg("战斗重连成功"); respmsg.set_errmsg("战斗重连成功");
SendNotifyMsg(respmsg); SendNotifyMsg(respmsg);
PlayerMgr::Instance()->ReBindSocket(this); PlayerMgr::Instance()->ReBindSocket(this);
a8::UdpLog::Instance()->Debug
("战斗服重连成功 %s %d %d",
{
account_id,
hdr.socket_handle,
old_socket_handle
});
} }
void Player::_CMMove(f8::MsgHdr& hdr, const cs::CMMove& msg) void Player::_CMMove(f8::MsgHdr& hdr, const cs::CMMove& msg)

View File

@ -198,5 +198,4 @@ void PlayerMgr::DecAccountNum(const std::string& account_id)
void PlayerMgr::ReBindSocket(Player* hum) void PlayerMgr::ReBindSocket(Player* hum)
{ {
socket_hash_[hum->socket_handle] = hum; socket_hash_[hum->socket_handle] = hum;
IncAccountNum(hum->account_id);
} }

View File

@ -769,7 +769,7 @@ bool Room::CanJoin(const std::string& accountid,
void Room::OnPlayerOffline(Player* hum) void Room::OnPlayerOffline(Player* hum)
{ {
if (GetOnlinePlayerNum() <= 0) { if (GetOnlinePlayerNum() <= 0) {
xtimer.AddDeadLineTimer xtimer.AddDeadLineTimerAndAttach
( (
SERVER_FRAME_RATE * 40, SERVER_FRAME_RATE * 40,
a8::XParams() a8::XParams()
@ -777,11 +777,12 @@ void Room::OnPlayerOffline(Player* hum)
[] (const a8::XParams& param) [] (const a8::XParams& param)
{ {
Room* room = (Room*)param.sender.GetUserData(); Room* room = (Room*)param.sender.GetUserData();
if (room->GetOnlinePlayerNum() <= 0) { if (room->GetOnlinePlayerNum() <= 0 && !room->added_to_over_room) {
GameLog::Instance()->ForceOver(room); GameLog::Instance()->ForceOver(room);
RoomMgr::Instance()->AddOverRoom(room->room_uuid_); RoomMgr::Instance()->AddOverRoom(room->room_uuid_);
} }
}); },
&timer_attacher.timer_list_);
} }
} }

View File

@ -43,6 +43,7 @@ public:
GridService* grid_service = nullptr; GridService* grid_service = nullptr;
MapService* map_service = nullptr; MapService* map_service = nullptr;
bool debug_trace = false; bool debug_trace = false;
bool added_to_over_room = false;
~Room(); ~Room();
void InitData(RoomInitInfo& init_info); void InitData(RoomInitInfo& init_info);

View File

@ -288,6 +288,7 @@ void RoomMgr::AddOverRoom(long long room_uuid)
inactive_room_hash_.erase(room_uuid); inactive_room_hash_.erase(room_uuid);
Room* room = GetRoomByUuid(room_uuid); Room* room = GetRoomByUuid(room_uuid);
if (room) { if (room) {
room->added_to_over_room = true;
a8::Timer::Instance()->AddRepeatTimerAndAttach a8::Timer::Instance()->AddRepeatTimerAndAttach
(1000 * 5, (1000 * 5,
a8::XParams() a8::XParams()