cache.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package cache
  2. import (
  3. "f1-game/internal/extend/maps"
  4. "f1-game/internal/sessions"
  5. "github.com/cherry-game/cherry/net/parser/pomelo"
  6. )
  7. type (
  8. AgentSyncMap = maps.SyncMap[int64, *pomelo.Agent]
  9. )
  10. var (
  11. playerAgentsMap = &AgentSyncMap{} // key:(int64)playerID, value:*Agent
  12. gameAgentsMap = maps.SyncMap[string, *AgentSyncMap]{} // key:(string)gameNodeID, value:{key:playerID, value:*Agent}
  13. mapAgentsMap = maps.SyncMap[string, *AgentSyncMap]{} // key:(int64)mapNodeID, value:{key:playerID,value:*Agent}
  14. )
  15. func UpdateAgent(agent *pomelo.Agent) {
  16. playerID := sessions.GetPlayerID(agent.Session())
  17. if playerID < 1 {
  18. return
  19. }
  20. playerAgentsMap.Store(playerID, agent)
  21. if gameNodeID := sessions.GetGameNodeID(agent.Session()); gameNodeID != "" {
  22. gameMaps, _ := gameAgentsMap.LoadOrStore(gameNodeID, &AgentSyncMap{})
  23. gameMaps.Store(playerID, agent)
  24. }
  25. if mapNodeID := sessions.GetMapNodeID(agent.Session()); mapNodeID != "" {
  26. mapMaps, _ := mapAgentsMap.LoadOrStore(mapNodeID, &AgentSyncMap{})
  27. mapMaps.Store(playerID, agent)
  28. }
  29. }
  30. func RemoveAgent(agent *pomelo.Agent) {
  31. playerID := sessions.GetPlayerID(agent.Session())
  32. if playerID < 1 {
  33. return
  34. }
  35. playerAgentsMap.Delete(playerID)
  36. if gameNodeID := sessions.GetGameNodeID(agent.Session()); gameNodeID != "" {
  37. if gameMaps, found := gameAgentsMap.Load(gameNodeID); found {
  38. gameMaps.Delete(playerID)
  39. }
  40. }
  41. if mapNodeID := sessions.GetMapNodeID(agent.Session()); mapNodeID != "" {
  42. if mapMaps, found := mapAgentsMap.Load(mapNodeID); found {
  43. mapMaps.Delete(playerID)
  44. }
  45. }
  46. }
  47. func GetPlayerAgent(playerID int64) (*pomelo.Agent, bool) {
  48. return playerAgentsMap.Load(playerID)
  49. }
  50. func GetGameAgentsMap(gameNodeID string) (*AgentSyncMap, bool) {
  51. return gameAgentsMap.Load(gameNodeID)
  52. }
  53. func GetMapAgentsMap(mapNodeID string) (*AgentSyncMap, bool) {
  54. return mapAgentsMap.Load(mapNodeID)
  55. }