From 2a3ce258980355ab4082b9d13df5442200541675 Mon Sep 17 00:00:00 2001 From: flswld Date: Tue, 14 Mar 2023 20:08:06 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BD=91=E5=85=B3=E9=A1=B6=E7=99=BB=E5=BD=95bu?= =?UTF-8?q?g=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gate/net/session.go | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/gate/net/session.go b/gate/net/session.go index 066f6afd..b70e1580 100644 --- a/gate/net/session.go +++ b/gate/net/session.go @@ -288,6 +288,7 @@ func (k *KcpConnectManager) sendMsgHandle() { // 唤醒存在的顶号登录流程 logger.Info("awake interrupt login, uid: %v", serverMsg.UserId) kickFinishNotifyChan <- true + delete(reLoginRemoteKickRegMap, serverMsg.UserId) } } } @@ -373,13 +374,21 @@ func (k *KcpConnectManager) getPlayerToken(req *proto.GetPlayerTokenReq, session ConvId: oldSession.conn.GetConv(), EventId: KcpConnRelogin, } - kickFinishNotifyChan := make(chan bool) + kickFinishNotifyChan := make(chan bool, 1) k.reLoginRemoteKickRegChan <- &RemoteKick{ userId: uid, kickFinishNotifyChan: kickFinishNotifyChan, } logger.Info("run local interrupt login wait, uid: %v", uid) - <-kickFinishNotifyChan + timer := time.NewTimer(time.Second * 10) + select { + case <-timer.C: + logger.Error("local interrupt login wait timeout, uid: %v", uid) + timer.Stop() + loginFailClose() + return nil + case <-kickFinishNotifyChan: + } } k.globalGsOnlineMapLock.RLock() _, exist := k.globalGsOnlineMap[uid] @@ -395,13 +404,21 @@ func (k *KcpConnectManager) getPlayerToken(req *proto.GetPlayerTokenReq, session ConnCtrlMsg: connCtrlMsg, }) // 注册回调通知 - kickFinishNotifyChan := make(chan bool) + kickFinishNotifyChan := make(chan bool, 1) k.reLoginRemoteKickRegChan <- &RemoteKick{ userId: uid, kickFinishNotifyChan: kickFinishNotifyChan, } logger.Info("run global interrupt login wait, uid: %v", uid) - <-kickFinishNotifyChan + timer := time.NewTimer(time.Second * 10) + select { + case <-timer.C: + logger.Error("global interrupt login wait timeout, uid: %v", uid) + timer.Stop() + loginFailClose() + return nil + case <-kickFinishNotifyChan: + } } // 关联玩家uid和连接信息 session.userId = uid