优化断线重连
This commit is contained in:
parent
74bd5e36f5
commit
475e739edb
@ -909,6 +909,10 @@ void Player::ProcPrepareItems2(const ::google::protobuf::RepeatedPtrField< cs::M
|
||||
|
||||
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;
|
||||
TouchAllLayerHumanList
|
||||
(
|
||||
@ -923,6 +927,13 @@ void Player::_CMReconnect(f8::MsgHdr& hdr, const cs::CMReconnect& msg)
|
||||
respmsg.set_errmsg("战斗重连成功");
|
||||
SendNotifyMsg(respmsg);
|
||||
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)
|
||||
|
@ -198,5 +198,4 @@ void PlayerMgr::DecAccountNum(const std::string& account_id)
|
||||
void PlayerMgr::ReBindSocket(Player* hum)
|
||||
{
|
||||
socket_hash_[hum->socket_handle] = hum;
|
||||
IncAccountNum(hum->account_id);
|
||||
}
|
||||
|
@ -769,7 +769,7 @@ bool Room::CanJoin(const std::string& accountid,
|
||||
void Room::OnPlayerOffline(Player* hum)
|
||||
{
|
||||
if (GetOnlinePlayerNum() <= 0) {
|
||||
xtimer.AddDeadLineTimer
|
||||
xtimer.AddDeadLineTimerAndAttach
|
||||
(
|
||||
SERVER_FRAME_RATE * 40,
|
||||
a8::XParams()
|
||||
@ -777,11 +777,12 @@ void Room::OnPlayerOffline(Player* hum)
|
||||
[] (const a8::XParams& param)
|
||||
{
|
||||
Room* room = (Room*)param.sender.GetUserData();
|
||||
if (room->GetOnlinePlayerNum() <= 0) {
|
||||
if (room->GetOnlinePlayerNum() <= 0 && !room->added_to_over_room) {
|
||||
GameLog::Instance()->ForceOver(room);
|
||||
RoomMgr::Instance()->AddOverRoom(room->room_uuid_);
|
||||
}
|
||||
});
|
||||
},
|
||||
&timer_attacher.timer_list_);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -43,6 +43,7 @@ public:
|
||||
GridService* grid_service = nullptr;
|
||||
MapService* map_service = nullptr;
|
||||
bool debug_trace = false;
|
||||
bool added_to_over_room = false;
|
||||
|
||||
~Room();
|
||||
void InitData(RoomInitInfo& init_info);
|
||||
|
@ -288,6 +288,7 @@ void RoomMgr::AddOverRoom(long long room_uuid)
|
||||
inactive_room_hash_.erase(room_uuid);
|
||||
Room* room = GetRoomByUuid(room_uuid);
|
||||
if (room) {
|
||||
room->added_to_over_room = true;
|
||||
a8::Timer::Instance()->AddRepeatTimerAndAttach
|
||||
(1000 * 5,
|
||||
a8::XParams()
|
||||
|
Loading…
x
Reference in New Issue
Block a user