消息日志优化

This commit is contained in:
hahwu 2025-12-30 15:03:27 +08:00
parent 4cf882ecd2
commit f5fef79619

View File

@ -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
}