网关顶登录bug修复

This commit is contained in:
flswld
2023-03-14 20:08:06 +08:00
parent cd922d1a38
commit 2a3ce25898

View File

@@ -288,6 +288,7 @@ func (k *KcpConnectManager) sendMsgHandle() {
// 唤醒存在的顶号登录流程 // 唤醒存在的顶号登录流程
logger.Info("awake interrupt login, uid: %v", serverMsg.UserId) logger.Info("awake interrupt login, uid: %v", serverMsg.UserId)
kickFinishNotifyChan <- true kickFinishNotifyChan <- true
delete(reLoginRemoteKickRegMap, serverMsg.UserId)
} }
} }
} }
@@ -373,13 +374,21 @@ func (k *KcpConnectManager) getPlayerToken(req *proto.GetPlayerTokenReq, session
ConvId: oldSession.conn.GetConv(), ConvId: oldSession.conn.GetConv(),
EventId: KcpConnRelogin, EventId: KcpConnRelogin,
} }
kickFinishNotifyChan := make(chan bool) kickFinishNotifyChan := make(chan bool, 1)
k.reLoginRemoteKickRegChan <- &RemoteKick{ k.reLoginRemoteKickRegChan <- &RemoteKick{
userId: uid, userId: uid,
kickFinishNotifyChan: kickFinishNotifyChan, kickFinishNotifyChan: kickFinishNotifyChan,
} }
logger.Info("run local interrupt login wait, uid: %v", uid) 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() k.globalGsOnlineMapLock.RLock()
_, exist := k.globalGsOnlineMap[uid] _, exist := k.globalGsOnlineMap[uid]
@@ -395,13 +404,21 @@ func (k *KcpConnectManager) getPlayerToken(req *proto.GetPlayerTokenReq, session
ConnCtrlMsg: connCtrlMsg, ConnCtrlMsg: connCtrlMsg,
}) })
// 注册回调通知 // 注册回调通知
kickFinishNotifyChan := make(chan bool) kickFinishNotifyChan := make(chan bool, 1)
k.reLoginRemoteKickRegChan <- &RemoteKick{ k.reLoginRemoteKickRegChan <- &RemoteKick{
userId: uid, userId: uid,
kickFinishNotifyChan: kickFinishNotifyChan, kickFinishNotifyChan: kickFinishNotifyChan,
} }
logger.Info("run global interrupt login wait, uid: %v", uid) 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和连接信息 // 关联玩家uid和连接信息
session.userId = uid session.userId = uid