From 4bc835e0b104700053542fca5a83c675d843c821 Mon Sep 17 00:00:00 2001 From: flswld Date: Mon, 3 Apr 2023 19:53:39 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=BD=91=E5=85=B3=E6=9C=AC?= =?UTF-8?q?=E5=9C=B0=E9=A1=B6=E7=99=BB=E5=BD=95=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gate/net/session.go | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/gate/net/session.go b/gate/net/session.go index 0b285725..37a34ad6 100644 --- a/gate/net/session.go +++ b/gate/net/session.go @@ -398,15 +398,24 @@ func (k *KcpConnectManager) getPlayerToken(req *proto.GetPlayerTokenReq, session return nil case <-regFinishNotifyChan: } - // 顶号 - connCtrlMsg := new(mq.ConnCtrlMsg) - connCtrlMsg.KickUserId = uid - connCtrlMsg.KickReason = kcp.EnetServerRelogin - k.messageQueue.SendToAll(&mq.NetMsg{ - MsgType: mq.MsgTypeConnCtrl, - EventId: mq.KickPlayerNotify, - ConnCtrlMsg: connCtrlMsg, - }) + oldSession := k.GetSessionByUserId(uid) + if oldSession != nil { + // 本地顶号 + k.kcpEventInput <- &KcpEvent{ + ConvId: oldSession.conn.GetConv(), + EventId: KcpConnRelogin, + } + } else { + // 远程顶号 + connCtrlMsg := new(mq.ConnCtrlMsg) + connCtrlMsg.KickUserId = uid + connCtrlMsg.KickReason = kcp.EnetServerRelogin + k.messageQueue.SendToAll(&mq.NetMsg{ + MsgType: mq.MsgTypeConnCtrl, + EventId: mq.KickPlayerNotify, + ConnCtrlMsg: connCtrlMsg, + }) + } // 顶号等待 logger.Info("run global interrupt login kick wait, uid: %v", uid) timer = time.NewTimer(time.Second * 10)