diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index 239355a5..41b9d45d 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -74,8 +74,9 @@ func (m *MessageMgr) MessageMgrInit() { m.Use(LoggingMiddleware()) m.Use(TimeoutMiddleware(5 * time.Second)) if conf.Server.ServerType == "center" { - m.RegisterHandler(msg.HANDLE_MOD_PLAYER_LOGIN, MessageHandlerFunc(PlayerLogin)) - m.RegisterHandler(msg.HANDLE_MOD_PLAYER_MSG, MessageHandlerFunc(SendToPlayer)) + m.RegisterHandler(msg.HANDLE_MOD_PLAYER_LOGIN, MessageHandlerFunc(PlayerLoginHandler)) + m.RegisterHandler(msg.HANDLE_MOD_PLAYER_MSG, MessageHandlerFunc(CenterPlayerMsgHandler)) + m.RegisterHandler(msg.HANDLE_MOD_COMSUME_MSG, MessageHandlerFunc(ComsumerMsgHandler)) } else { m.RegisterHandler(msg.HANDLE_MOD_PLAYER_MSG, MessageHandlerFunc(PlayerMsgHandler)) } @@ -90,7 +91,7 @@ func getData() *MessageData { return G_GameLogicPtr.MessageMgr.data.(*MessageData) } -func PlayerLogin(data *msg.Msg) (interface{}, error) { +func PlayerLoginHandler(data *msg.Msg) (interface{}, error) { // 关闭 Worker Pool messageMgrData := getData() messageMgrData.mu.Lock() @@ -105,7 +106,26 @@ func PlayerLogin(data *msg.Msg) (interface{}, error) { return nil, nil } -func SendToPlayer(data *msg.Msg) (interface{}, error) { +func ComsumerMsgHandler(data *msg.Msg) (interface{}, error) { + messageMgrData := getData() + Message, ok := messageMgrData.MessageList[int64(data.From)] + if !ok { + return nil, nil + } + Message.mu.Lock() + defer Message.mu.Unlock() + for i, msgItem := range Message.Messages { + if msgItem.Id == data.Id { + // 删除消息 + Message.Messages = append(Message.Messages[:i], Message.Messages[i+1:]...) + log.Debug("[Middleware] Comsume message success type: %d, player id: %v", msgItem.Type, msgItem.From) + break + } + } + return nil, nil +} + +func CenterPlayerMsgHandler(data *msg.Msg) (interface{}, error) { PlayerId := int64(data.To) messageMgrData := getData() // 遍历消息列表,发送消息给在线玩家 @@ -432,14 +452,12 @@ func SendMsgToNode(m *msg.Msg, node int) error { func SendPlayerMsg(m *msg.Msg) error { clone := m.Clone() - clone.UniKey = GoUtil.UniKey(fmt.Sprintf("%v,Player Msg", m)) clone.HandleType = msg.HANDLE_MOD_PLAYER_MSG return mergeCluster.SendServerMsg(m, conf.Server.CenterNode) } func CallPlayerMsg(m *msg.Msg) (interface{}, error) { clone := m.Clone() - clone.UniKey = GoUtil.UniKey(fmt.Sprintf("%v,Player Msg", m)) clone.HandleType = msg.HANDLE_MOD_PLAYER_MSG return mergeCluster.CallServerMsg(m, conf.Server.CenterNode) }