package cache import ( "f1-game/internal/extend/maps" "f1-game/internal/sessions" "github.com/cherry-game/cherry/net/parser/pomelo" ) type ( AgentSyncMap = maps.SyncMap[int64, *pomelo.Agent] ) var ( playerAgentsMap = &AgentSyncMap{} // key:(int64)playerID, value:*Agent gameAgentsMap = maps.SyncMap[string, *AgentSyncMap]{} // key:(string)gameNodeID, value:{key:playerID, value:*Agent} mapAgentsMap = maps.SyncMap[string, *AgentSyncMap]{} // key:(int64)mapNodeID, value:{key:playerID,value:*Agent} ) func UpdateAgent(agent *pomelo.Agent) { playerID := sessions.GetPlayerID(agent.Session()) if playerID < 1 { return } playerAgentsMap.Store(playerID, agent) if gameNodeID := sessions.GetGameNodeID(agent.Session()); gameNodeID != "" { gameMaps, _ := gameAgentsMap.LoadOrStore(gameNodeID, &AgentSyncMap{}) gameMaps.Store(playerID, agent) } if mapNodeID := sessions.GetMapNodeID(agent.Session()); mapNodeID != "" { mapMaps, _ := mapAgentsMap.LoadOrStore(mapNodeID, &AgentSyncMap{}) mapMaps.Store(playerID, agent) } } func RemoveAgent(agent *pomelo.Agent) { playerID := sessions.GetPlayerID(agent.Session()) if playerID < 1 { return } playerAgentsMap.Delete(playerID) if gameNodeID := sessions.GetGameNodeID(agent.Session()); gameNodeID != "" { if gameMaps, found := gameAgentsMap.Load(gameNodeID); found { gameMaps.Delete(playerID) } } if mapNodeID := sessions.GetMapNodeID(agent.Session()); mapNodeID != "" { if mapMaps, found := mapAgentsMap.Load(mapNodeID); found { mapMaps.Delete(playerID) } } } func GetPlayerAgent(playerID int64) (*pomelo.Agent, bool) { return playerAgentsMap.Load(playerID) } func GetGameAgentsMap(gameNodeID string) (*AgentSyncMap, bool) { return gameAgentsMap.Load(gameNodeID) } func GetMapAgentsMap(mapNodeID string) (*AgentSyncMap, bool) { return mapAgentsMap.Load(mapNodeID) }