diff --git a/src/server/cluster/cluster_func.go b/src/server/cluster/cluster_func.go index d252d431..eca8db02 100644 --- a/src/server/cluster/cluster_func.go +++ b/src/server/cluster/cluster_func.go @@ -27,14 +27,14 @@ func HandShake(a *Agent) { log.Debug("HandShake GobMarshal err %v", err) return } - // log.Debug("握手 server id :%d", conf.Server.ServerID) + log.Debug("握手 server id :%d", conf.Server.ServerID) a.WriteMsg(data) } // 握手回调 func HandShakeRecv(a *Agent, m *msg.Msg) error { ServerId := m.From - // log.Debug("收到握手回复 ServerId %v", ServerId) + log.Debug("收到握手回复 ServerId %v", ServerId) a.ServerId = ServerId serverAgent.Store(ServerId, a) diff --git a/src/server/game/game_type.go b/src/server/game/game_type.go index 47e1f73a..fcbae002 100644 --- a/src/server/game/game_type.go +++ b/src/server/game/game_type.go @@ -5,6 +5,7 @@ import ( "server/game/mod/friend" limitedTimeEvent "server/game/mod/limited_time_event" "server/game/mod/msg" + "sync" ) type PlayerSimpleData struct { @@ -49,6 +50,7 @@ type VarUserData struct { Upvote int Chip int Kiss int + mu sync.Mutex } type VarExpireData struct { diff --git a/src/server/game/message_mgr.go b/src/server/game/message_mgr.go index 41b9d45d..0abca11b 100644 --- a/src/server/game/message_mgr.go +++ b/src/server/game/message_mgr.go @@ -75,6 +75,7 @@ func (m *MessageMgr) MessageMgrInit() { m.Use(TimeoutMiddleware(5 * time.Second)) if conf.Server.ServerType == "center" { m.RegisterHandler(msg.HANDLE_MOD_PLAYER_LOGIN, MessageHandlerFunc(PlayerLoginHandler)) + m.RegisterHandler(msg.HANDLE_MDO_PLAYER_LOGOUT, MessageHandlerFunc(PlayerLogoutHandler)) m.RegisterHandler(msg.HANDLE_MOD_PLAYER_MSG, MessageHandlerFunc(CenterPlayerMsgHandler)) m.RegisterHandler(msg.HANDLE_MOD_COMSUME_MSG, MessageHandlerFunc(ComsumerMsgHandler)) } else { @@ -102,13 +103,35 @@ func PlayerLoginHandler(data *msg.Msg) (interface{}, error) { Messages: []*msg.Msg{}, } } - messageMgrData.PlayerList[int64(data.From)] = data.Extra.(int) + log.Debug("[Middleware] Player login success player id: %v, node: %v", data.From, data.Extra.(int)) + node := data.Extra.(int) + messageMgrData.PlayerList[int64(data.From)] = node + + // 发送离线消息 + messages := messageMgrData.MessageList[int64(data.From)] + messages.mu.Lock() + defer messages.mu.Unlock() + for _, message := range messages.Messages { + err := SendMsgToNode(message, node) + if err != nil { + log.Error("Failed to send message to player %d: %v", data.From, err) + } + } + return nil, nil +} + +func PlayerLogoutHandler(data *msg.Msg) (interface{}, error) { + messageMgrData := getData() + messageMgrData.mu.Lock() + defer messageMgrData.mu.Unlock() + delete(messageMgrData.PlayerList, int64(data.From)) + log.Debug("[Middleware] Player logout success player id: %v", data.From) return nil, nil } func ComsumerMsgHandler(data *msg.Msg) (interface{}, error) { messageMgrData := getData() - Message, ok := messageMgrData.MessageList[int64(data.From)] + Message, ok := messageMgrData.MessageList[int64(data.To)] if !ok { return nil, nil } diff --git a/src/server/game/mod/msg/Msg.go b/src/server/game/mod/msg/Msg.go index 2438d245..0e77e043 100644 --- a/src/server/game/mod/msg/Msg.go +++ b/src/server/game/mod/msg/Msg.go @@ -20,10 +20,12 @@ var MSG_ZERO_UPDATE = &Msg{Type: SERVER_ZERO_UPDATE} var MSG_NOON_UPDATE = &Msg{Type: SERVER_NOON_UPDATE} const ( - HANDLE_MOD_PLAYER_MSG = 20001 // 玩家消息 - HANDLE_MOD_CLUSTER_MSG = 20002 // 集群消息 - HANDLE_MOD_PLAYER_LOGIN = 20003 // 玩家登录消息 - HANDLE_MOD_COMSUME_MSG = 20004 // 消费消息 + HANDLE_MOD_PLAYER_MSG = 20001 // 玩家消息 + HANDLE_MOD_CLUSTER_MSG = 20002 // 集群消息 + HANDLE_MOD_PLAYER_LOGIN = 20003 // 玩家登录消息 + HANDLE_MOD_COMSUME_MSG = 20004 // 消费消息 + HANDLE_MOD_CLUSTER_SYNC = 20005 // 集群同步消息 + HANDLE_MDO_PLAYER_LOGOUT = 20006 // 玩家登出消息 ) const (