修复多账号登录

This commit is contained in:
huangxiaolei
2022-11-28 16:15:07 +08:00
parent 7cdcb3ec09
commit 877f3dc192
15 changed files with 215 additions and 141 deletions

View File

@@ -4,6 +4,8 @@ import (
"bytes"
"encoding/base64"
"encoding/binary"
"hk4e/dispatch/controller"
"hk4e/pkg/httpclient"
"strconv"
"strings"
@@ -15,27 +17,29 @@ import (
)
func (f *ForwardManager) getPlayerToken(convId uint64, req *proto.GetPlayerTokenReq) (rsp *proto.GetPlayerTokenRsp) {
_ = req.AccountUid
_ = req.AccountToken
tokenValid := true
accountForbid := false
accountForbidEndTime := uint32(0)
accountPlayerID := uint32(100000001)
if !tokenValid {
// TODO 请求sdk验证token
tokenVerifyRsp, err := httpclient.Post[controller.TokenVerifyRsp]("http://127.0.0.1:8080/gate/token/verify", &controller.TokenVerifyReq{
AccountId: req.AccountUid,
AccountToken: req.AccountToken,
}, "")
if err != nil {
logger.LOG.Error("verify token error: %v", err)
return nil
}
if !tokenVerifyRsp.Valid {
logger.LOG.Error("token error")
return nil
}
// TODO 请求sdk验证token
// comboToken验证成功
if accountForbid {
if tokenVerifyRsp.Forbid {
// 封号通知
rsp = new(proto.GetPlayerTokenRsp)
rsp.Uid = accountPlayerID
rsp.Uid = tokenVerifyRsp.PlayerID
rsp.IsProficientPlayer = true
rsp.Retcode = 21
rsp.Msg = "FORBID_CHEATING_PLUGINS"
//rsp.BlackUidEndTime = 2051193600 // 2035-01-01 00:00:00
rsp.BlackUidEndTime = accountForbidEndTime
rsp.BlackUidEndTime = tokenVerifyRsp.ForbidEndTime
rsp.RegPlatform = 3
rsp.CountryCode = "US"
addr, exist := f.getAddrByConvId(convId)
@@ -47,7 +51,7 @@ func (f *ForwardManager) getPlayerToken(convId uint64, req *proto.GetPlayerToken
rsp.ClientIpStr = split[0]
return rsp
}
oldConvId, oldExist := f.getConvIdByUserId(accountPlayerID)
oldConvId, oldExist := f.getConvIdByUserId(tokenVerifyRsp.PlayerID)
if oldExist {
// 顶号
f.kcpEventInput <- &net.KcpEvent{
@@ -56,14 +60,15 @@ func (f *ForwardManager) getPlayerToken(convId uint64, req *proto.GetPlayerToken
EventMessage: uint32(kcp.EnetServerRelogin),
}
}
f.setUserIdByConvId(convId, accountPlayerID)
f.setConvIdByUserId(accountPlayerID, convId)
// 关联玩家uid和连接信息
f.setUserIdByConvId(convId, tokenVerifyRsp.PlayerID)
f.setConvIdByUserId(tokenVerifyRsp.PlayerID, convId)
f.setConnState(convId, ConnWaitLogin)
// 返回响应
rsp = new(proto.GetPlayerTokenRsp)
rsp.Uid = accountPlayerID
rsp.Uid = tokenVerifyRsp.PlayerID
// TODO 不同的token
rsp.Token = req.AccountToken
rsp.Token = "xxx"
rsp.AccountType = 1
// TODO 要确定一下新注册的号这个值该返回什么
rsp.IsProficientPlayer = true
@@ -149,20 +154,16 @@ func (f *ForwardManager) getPlayerToken(convId uint64, req *proto.GetPlayerToken
}
func (f *ForwardManager) playerLogin(convId uint64, req *proto.PlayerLoginReq) (rsp *proto.PlayerLoginRsp) {
userId, exist := f.getUserIdByConvId(convId)
if !exist {
logger.LOG.Error("can not find userId by convId")
return nil
tokenValid := false
// TODO 不同的token
if req.Token == "xxx" {
tokenValid = true
}
_ = userId
_ = req.Token
tokenValid := true
if !tokenValid {
logger.LOG.Error("token error")
return nil
}
// TODO 请求sdk验证token
// comboToken验证成功
// token验证成功
f.setConnState(convId, ConnAlive)
// 返回响应
rsp = new(proto.PlayerLoginRsp)

View File

@@ -49,7 +49,7 @@ func (p *ProtoEnDecode) protoDecode(kcpMsg *KcpMsg) (protoMsgList []*ProtoMsg) {
}
// payload msg
protoMessageList := make([]*ProtoMessage, 0)
p.protoDecodePayloadCore(kcpMsg.CmdId, kcpMsg.ProtoData, &protoMessageList)
p.protoDecodePayloadLoop(kcpMsg.CmdId, kcpMsg.ProtoData, &protoMessageList)
if len(protoMessageList) == 0 {
logger.LOG.Error("decode proto object is nil")
return protoMsgList
@@ -61,25 +61,26 @@ func (p *ProtoEnDecode) protoDecode(kcpMsg *KcpMsg) (protoMsgList []*ProtoMsg) {
msg.CmdId = protoMessage.cmdId
msg.HeadMessage = protoMsg.HeadMessage
msg.PayloadMessage = protoMessage.message
logger.LOG.Debug("[recv] union proto msg, convId: %v, cmdId: %v", msg.ConvId, msg.CmdId)
if protoMessage.cmdId == cmd.UnionCmdNotify {
// 聚合消息自身不再往后发送
logger.LOG.Debug("[recv union], cmdId: %v, convId: %v, headMsg: %v", msg.CmdId, msg.ConvId, msg.HeadMessage)
continue
}
logger.LOG.Debug("[recv] proto msg, convId: %v, cmdId: %v, headMsg: %v", protoMsg.ConvId, protoMsg.CmdId, protoMsg.HeadMessage)
protoMsgList = append(protoMsgList, msg)
}
// 聚合消息自身不再往后发送
return protoMsgList
} else {
protoMsg.PayloadMessage = protoMessageList[0].message
protoMsgList = append(protoMsgList, protoMsg)
}
logger.LOG.Debug("[recv] proto msg, convId: %v, cmdId: %v, headMsg: %v", protoMsg.ConvId, protoMsg.CmdId, protoMsg.HeadMessage)
protoMsgList = append(protoMsgList, protoMsg)
cmdName := ""
if protoMsg.PayloadMessage != nil {
cmdName = string(protoMsg.PayloadMessage.ProtoReflect().Descriptor().FullName())
}
logger.LOG.Debug("[recv], cmdId: %v, cmdName: %v, convId: %v, headMsg: %v", protoMsg.CmdId, cmdName, protoMsg.ConvId, protoMsg.HeadMessage)
return protoMsgList
}
func (p *ProtoEnDecode) protoDecodePayloadCore(cmdId uint16, protoData []byte, protoMessageList *[]*ProtoMessage) {
func (p *ProtoEnDecode) protoDecodePayloadLoop(cmdId uint16, protoData []byte, protoMessageList *[]*ProtoMessage) {
protoObj := p.decodePayloadToProto(cmdId, protoData)
if protoObj == nil {
logger.LOG.Error("decode proto object is nil")
@@ -93,7 +94,7 @@ func (p *ProtoEnDecode) protoDecodePayloadCore(cmdId uint16, protoData []byte, p
return
}
for _, unionCmd := range unionCmdNotify.GetCmdList() {
p.protoDecodePayloadCore(uint16(unionCmd.MessageId), unionCmd.Body, protoMessageList)
p.protoDecodePayloadLoop(uint16(unionCmd.MessageId), unionCmd.Body, protoMessageList)
}
}
*protoMessageList = append(*protoMessageList, &ProtoMessage{
@@ -103,7 +104,11 @@ func (p *ProtoEnDecode) protoDecodePayloadCore(cmdId uint16, protoData []byte, p
}
func (p *ProtoEnDecode) protoEncode(protoMsg *ProtoMsg) (kcpMsg *KcpMsg) {
logger.LOG.Debug("[send] proto msg, convId: %v, cmdId: %v, headMsg: %v", protoMsg.ConvId, protoMsg.CmdId, protoMsg.HeadMessage)
cmdName := ""
if protoMsg.PayloadMessage != nil {
cmdName = string(protoMsg.PayloadMessage.ProtoReflect().Descriptor().FullName())
}
logger.LOG.Debug("[send], cmdId: %v, cmdName: %v, convId: %v, headMsg: %v", protoMsg.CmdId, cmdName, protoMsg.ConvId, protoMsg.HeadMessage)
kcpMsg = new(KcpMsg)
kcpMsg.ConvId = protoMsg.ConvId
kcpMsg.CmdId = protoMsg.CmdId