diff --git a/src/server/game/external.go b/src/server/game/external.go index 40c6271b..9039a031 100644 --- a/src/server/game/external.go +++ b/src/server/game/external.go @@ -181,16 +181,18 @@ func HandleClientReq(args []interface{}) { db.UpdateAccountInfoDeviceToDb(accountInfo) p, _ := internal.Agents.Load(a) if p != nil { + p.(*Player).lock.Lock() //加锁 + defer p.(*Player).lock.Unlock() //解锁 log.Debug("player %s login success", detail.UserName) p.(*Player).PlayMod.getBaseMod().DiviceId = detail.Device //加锁 p.(*Player).PushClientRes(ResLogin) p.(*Player).LoginBackData() p.(*Player).TeLog("Login_log", nil) + p.(*Player).ProcessTrigger() } if newPlayer { log.Debug("uid : %d, init user process : %s, execTime : %v , isNew: %v", p.(*Player).M_DwUin, m.GetFunc(), time.Since(start), newPlayer) } - p.(*Player).ProcessTrigger() case "ReqServerTime": // 获取服务器时间 detail := &msg.ReqServerTime{} proto.Unmarshal(buf, detail) diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index 98aecb1d..a1b97f47 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -286,6 +286,9 @@ func ComsumerMsgHandler(data *msg.Msg) (interface{}, error) { messages.mu.Lock() defer messages.mu.Unlock() for i, msgItem := range messages.Messages { + if msgItem == nil { + continue + } if msgItem.UniKey == data.UniKey { // 删除消息 messages.Messages = append(messages.Messages[:i], messages.Messages[i+1:]...) @@ -766,6 +769,12 @@ func FriendMgrSend(m1 *msg.Msg) error { // 异步发送消息到指定节点 节点不在线则保存消息 func sendMessageAsync(m *msg.Msg, node int) error { + defer func() { + if r := recover(); r != nil { + log.Error("message_mgr fatal : sendMessageAsync err:%s", fmt.Sprintf("fatal : %s", r)) + GoUtil.SendFeishuFatal(0, "sendMessageAsync", fmt.Sprintf("fatal : %s", r)) + } + }() log.Debug("[Middleware] Send Async message to node: %d, message: %v", node, m) err := mergeCluster.SendServerMsg(m, node) if err != nil && GoUtil.InArray(m.HandleType, save_msg_type) { @@ -778,6 +787,12 @@ func sendMessageAsync(m *msg.Msg, node int) error { // 同步消息到指定节点 节点不在线则保存消息 func sendMessageSync(m *msg.Msg, node int) (*msg.Msg, error) { + defer func() { + if r := recover(); r != nil { + log.Error("message_mgr fatal : sendMessageSync err:%s", fmt.Sprintf("fatal : %s", r)) + GoUtil.SendFeishuFatal(0, "sendMessageSync", fmt.Sprintf("fatal : %s", r)) + } + }() log.Debug("[Middleware] Send Sync message to node: %d, message: %v", node, m) msg, err := mergeCluster.CallServerMsg(m, node) if err != nil && conf.Server.ServerType == "center" && GoUtil.InArray(m.HandleType, save_msg_type) {