This commit is contained in:
hahwu 2026-01-20 17:38:07 +08:00
parent ab269ac8a6
commit 104ab707a6
2 changed files with 53 additions and 10 deletions

View File

@ -147,6 +147,7 @@ func HandleClientReq(args []interface{}) {
data, _ := proto.Marshal(ResRegisterAccount) data, _ := proto.Marshal(ResRegisterAccount)
gl.PackResInfo(a, "ResRegisterAccount", data) gl.PackResInfo(a, "ResRegisterAccount", data)
case "ReqLogin": case "ReqLogin":
now := time.Now().UnixMilli()
detail := &msg.ReqLogin{} detail := &msg.ReqLogin{}
proto.Unmarshal(buf, detail) proto.Unmarshal(buf, detail)
accountInfo := db.GetAccountInfoFromDb(detail.UserName) accountInfo := db.GetAccountInfoFromDb(detail.UserName)
@ -162,11 +163,13 @@ func HandleClientReq(args []interface{}) {
G_GameLogicPtr.PackLoginResInfo(a, ResLogin) G_GameLogicPtr.PackLoginResInfo(a, ResLogin)
return return
} }
newPlayer := false
if ResLogin.DwUin > 0 { if ResLogin.DwUin > 0 {
PlayerInfo := G_GameLogicPtr.GetPlayer(ResLogin.DwUin) PlayerInfo := G_GameLogicPtr.GetPlayer(ResLogin.DwUin)
err := G_GameLogicPtr.ReplaceExistPlayerAndAgent(a, PlayerInfo) err := G_GameLogicPtr.ReplaceExistPlayerAndAgent(a, PlayerInfo)
if err != nil { if err != nil {
PlayerInfo = G_GameLogicPtr.CreateNewPlayer(a, detail.UserName) PlayerInfo = G_GameLogicPtr.CreateNewPlayer(a, detail.UserName)
newPlayer = true
} }
if PlayerInfo.PlayMod.getBaseMod().IdCardName == "" && conf.Server.IdVerify { if PlayerInfo.PlayMod.getBaseMod().IdCardName == "" && conf.Server.IdVerify {
ResLogin.ResultCode = MergeConst.Protocol_Error_Id_Not_Verify ResLogin.ResultCode = MergeConst.Protocol_Error_Id_Not_Verify
@ -184,6 +187,8 @@ func HandleClientReq(args []interface{}) {
p.(*Player).LoginBackData() p.(*Player).LoginBackData()
p.(*Player).TeLog("Login_log", nil) p.(*Player).TeLog("Login_log", nil)
} }
execTime := time.Now().UnixMilli() - now
log.Debug("uid : %d, func : %s, execTime : %d ms, isNew: %v", p.(*Player).M_DwUin, m.GetFunc(), execTime, newPlayer)
p.(*Player).ProcessTrigger() p.(*Player).ProcessTrigger()
case "ReqServerTime": // 获取服务器时间 case "ReqServerTime": // 获取服务器时间
detail := &msg.ReqServerTime{} detail := &msg.ReqServerTime{}
@ -219,13 +224,11 @@ func HandleClientReq(args []interface{}) {
} }
p.(*Player).ProcessTrigger() p.(*Player).ProcessTrigger()
execTime := time.Now().UnixMilli() - now execTime := time.Now().UnixMilli() - now
if execTime > int64(500) { log.Debug("uid : %d, func : %s, execTime : %d ms", p.(*Player).M_DwUin, m.GetFunc(), execTime)
log.Warn("uid : %d, func : %s, execTime : %d ms", p.(*Player).M_DwUin, m.GetFunc(), execTime) p.(*Player).TeLog("Long_Method_Log", map[string]interface{}{
p.(*Player).TeLog("Long_Method_Log", map[string]interface{}{ "method_name": m.GetFunc(),
"method_name": m.GetFunc(), "exec_time": execTime,
"exec_time": execTime, })
})
}
} }
} }
p, b := internal.Agents.Load(a) p, b := internal.Agents.Load(a)

View File

@ -92,7 +92,7 @@ func (p *PlayerChessData) UpdatePlayerChessData(player *Player, buf []byte) erro
for _, v := range update.MChessHandle { for _, v := range update.MChessHandle {
HandleStr += fmt.Sprintf("%v-%v-%v,", v.Id, v.ChessId, v.Type) HandleStr += fmt.Sprintf("%v-%v-%v,", v.Id, v.ChessId, v.Type)
} }
log.Debug("棋子数据不一致, %v===%v===%v===%v", HandleStr, LastMap, update.MChessData, player.PlayMod.getChessMod().GetChessList()) log.Debug("棋子数据不一致地图, %v===%v===%v===%v", HandleStr, LastMap, update.MChessData, player.PlayMod.getChessMod().GetChessList())
player.SendErrClienRes(res) player.SendErrClienRes(res)
player.TeLog("outsync_event", map[string]interface{}{ player.TeLog("outsync_event", map[string]interface{}{
"outsync_event": "UpdatePlayerChessDataFunc", "outsync_event": "UpdatePlayerChessDataFunc",
@ -118,7 +118,7 @@ func (p *PlayerChessData) UpdateChessData(player *Player, MChessData map[string]
Code: msg.RES_CODE_FAIL, Code: msg.RES_CODE_FAIL,
Msg: "棋子数据不一致", Msg: "棋子数据不一致",
} }
log.Debug("棋子数据不一致, %v---%v", p.Data.MChessData, player.PlayMod.getChessMod().GetChessList()) log.Debug("棋子数据不一致地图, %v---%v", p.Data.MChessData, player.PlayMod.getChessMod().GetChessList())
player.SendErrClienRes(res) player.SendErrClienRes(res)
player.TeLog("outsync_event", map[string]interface{}{ player.TeLog("outsync_event", map[string]interface{}{
"outsync_event": "UpdatePlayerChessDataFunc", "outsync_event": "UpdatePlayerChessDataFunc",
@ -165,7 +165,47 @@ func (p *PlayerChessData) checkChessEqual(player *Player) bool {
for _, v := range p.Data.MChessData { for _, v := range p.Data.MChessData {
bCopy = append(bCopy, int(v)) bCopy = append(bCopy, int(v))
} }
return SlicesEqual(aCopy, bCopy) isEqual := SlicesEqual(aCopy, bCopy)
if isEqual {
return true
}
// 找出aCopy多的元素和少的元素
aMap := make(map[int]int)
bMap := make(map[int]int)
for _, v := range aCopy {
aMap[v]++
}
for _, v := range bCopy {
bMap[v]++
}
extra := make([]int, 0)
missing := make([]int, 0)
// 找出aCopy多的元素
for k, v := range aMap {
if bMap[k] < v {
for i := 0; i < v-bMap[k]; i++ {
extra = append(extra, k)
}
}
}
// 找出aCopy少的元素
for k, v := range bMap {
if aMap[k] < v {
for i := 0; i < v-aMap[k]; i++ {
missing = append(missing, k)
}
}
}
if len(extra) > 0 || len(missing) > 0 {
log.Debug("棋子数据对比: aCopy多的元素=%v, aCopy少的元素=%v", extra, missing)
}
return false
} }
// 棋子操作 // 棋子操作