diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index 82aacc66..50fb737b 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -14,6 +14,8 @@ import ( "time" ) +var id = 1 + // 中间件函数类型 type MessageMiddleware func(MessageHandlerFunc) MessageHandlerFunc @@ -55,6 +57,7 @@ type MessageTask struct { Msg *msg.Msg Handler MessageHandlerFunc Result chan *TaskResult + id int } // 任务结果 @@ -200,23 +203,12 @@ func ClusterSyncHandler(data *msg.Msg) (interface{}, error) { func PlayerLoginHandler(data *msg.Msg) (interface{}, error) { // 关闭 Worker Pool - messageMgrData := getMessageData() - - messageMgrData.mu.Lock() node := data.Extra.(int) - messageMgrData.PlayerList[int64(data.From)] = node - if _, ok := messageMgrData.MessageList[int64(data.From)]; !ok { - messageMgrData.MessageList[int64(data.From)] = &MessageList{ - Messages: []*msg.Msg{}, - } - } - messageMgrData.mu.Unlock() log.Debug("[Middleware] Player login success player id: %v, node: %v", data.From, data.Extra.(int)) - // 对玩家消息列表加锁 - messages := messageMgrData.MessageList[int64(data.From)] + messages := getMessge(int64(data.From)) messages.mu.Lock() - defer messages.mu.Lock() + defer messages.mu.Unlock() // 发送离线消息 len := len(messages.Messages) for _, message := range messages.Messages { @@ -234,17 +226,13 @@ func PlayerLogoutHandler(data *msg.Msg) (interface{}, error) { } func ComsumerMsgHandler(data *msg.Msg) (interface{}, error) { - messageMgrData := getMessageData() - Message, ok := messageMgrData.MessageList[int64(data.To)] - if !ok { - return nil, nil - } - Message.mu.Lock() - defer Message.mu.Unlock() - for i, msgItem := range Message.Messages { + messages := getMessge(int64(data.From)) + messages.mu.Lock() + defer messages.mu.Unlock() + for i, msgItem := range messages.Messages { if msgItem.UniKey == data.UniKey { // 删除消息 - Message.Messages = append(Message.Messages[:i], Message.Messages[i+1:]...) + messages.Messages = append(messages.Messages[:i], messages.Messages[i+1:]...) log.Debug("[Middleware] Comsume message success type: %d, player id: %v", msgItem.Type, msgItem.From) break } @@ -256,15 +244,7 @@ func CenterPlayerMsgHandler(data *msg.Msg) (interface{}, error) { PlayerId := int64(data.To) messageMgrData := getMessageData() // 遍历消息列表,发送消息给在线玩家 - messages, ok := messageMgrData.MessageList[int64(PlayerId)] - if !ok { - messageMgrData.mu.Lock() - messages = &MessageList{ - Messages: []*msg.Msg{}, - } - messageMgrData.MessageList[int64(PlayerId)] = messages - messageMgrData.mu.Unlock() - } + messages := getMessge(PlayerId) messages.mu.Lock() defer messages.mu.Unlock() messages.Messages = append(messages.Messages, data) @@ -300,6 +280,18 @@ func PlayerReplyMsgHandler(data *msg.Msg) (interface{}, error) { return nil, nil } +func getMessge(PlayerId int64) *MessageList { + messageMgrData := getMessageData() + messageMgrData.mu.Lock() + defer messageMgrData.mu.Unlock() + if _, ok := messageMgrData.MessageList[int64(PlayerId)]; !ok { + messageMgrData.MessageList[int64(PlayerId)] = &MessageList{ + Messages: []*msg.Msg{}, + } + } + return messageMgrData.MessageList[int64(PlayerId)] +} + // 添加中间件 func (m *MessageMgr) Use(middleware MessageMiddleware) { m.middlewares = append(m.middlewares, middleware) @@ -337,9 +329,10 @@ func (m *MessageMgr) MessageHandleAsync(message *msg.Msg) error { if fun, ok := m.handler[message.HandleType]; ok { // 应用中间件 handlerWithMiddleware := m.applyMiddlewares(fun) - + id++ // 创建任务 task := &MessageTask{ + id: id, Msg: message, Handler: handlerWithMiddleware, Result: make(chan *TaskResult, 1), @@ -744,14 +737,10 @@ func saveMessage(m *msg.Msg) error { data := getMessageData() data.mu.Lock() defer data.mu.Unlock() - if _, ok := data.MessageList[int64(m.To)]; !ok { - data.MessageList[int64(m.To)] = &MessageList{ - Messages: []*msg.Msg{}, - } - } - data.MessageList[int64(m.To)].mu.Lock() - defer data.MessageList[int64(m.To)].mu.Unlock() - data.MessageList[int64(m.To)].Messages = append(data.MessageList[int64(m.To)].Messages, m) + messages := getMessge(int64(m.To)) + messages.mu.Lock() + defer messages.mu.Unlock() + messages.Messages = append(messages.Messages, m) return nil }