map.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. package sandMap
  2. import (
  3. capp "f1-game/internal/cherry_app"
  4. checkCenter "f1-game/internal/component/check_center"
  5. funcLoad "f1-game/internal/component/func_load"
  6. cgops "f1-game/internal/component/gops"
  7. "f1-game/internal/component/redis"
  8. "f1-game/internal/constant"
  9. "f1-game/internal/data"
  10. genPool "f1-game/internal/gen_pool"
  11. nameActor "f1-game/internal/name/actor"
  12. nameRemote "f1-game/internal/name/remote"
  13. "f1-game/internal/sessions"
  14. mapAOI "f1-game/nodes/map/aoi"
  15. mapExchange "f1-game/nodes/map/exchange"
  16. "f1-game/nodes/map/internal/db"
  17. facadeInit "f1-game/nodes/map/internal/facade/init"
  18. mapLeague "f1-game/nodes/map/league"
  19. mapLogic "f1-game/nodes/map/logic"
  20. "f1-game/nodes/map/ops"
  21. mapPathfind "f1-game/nodes/map/pathfind"
  22. mapPlayer "f1-game/nodes/map/player"
  23. "f1-game/nodes/map/rank"
  24. "f1-game/nodes/map/scout"
  25. mapSeason "f1-game/nodes/map/season"
  26. mapUnion "f1-game/nodes/map/union"
  27. "github.com/cherry-game/cherry"
  28. csnowflake "github.com/cherry-game/cherry/extend/snowflake"
  29. cfacade "github.com/cherry-game/cherry/facade"
  30. clog "github.com/cherry-game/cherry/logger"
  31. )
  32. func Run(node cfacade.INode) {
  33. app := cherry.ConfigureNode(
  34. node,
  35. false,
  36. cherry.Cluster,
  37. )
  38. app.Register(initBeforeFunc())
  39. app.Register(cgops.New())
  40. app.Register(data.New())
  41. app.Register(redis.NewClients(
  42. redis.GUID,
  43. redis.Game,
  44. ))
  45. app.Register(checkCenter.New())
  46. app.Register(db.NewMap())
  47. app.Register(initAfterFunc())
  48. app.AddActors(
  49. sessions.NewActor(true),
  50. genPool.NewActor(node.NodeID()),
  51. mapSeason.NewActor(),
  52. ops.NewActor(),
  53. rank.NewActor(),
  54. )
  55. app.ActorSystem().SetArrivalTimeout(50)
  56. app.ActorSystem().SetExecutionTimeout(50)
  57. app.Startup()
  58. }
  59. func initBeforeFunc() cfacade.IComponent {
  60. fn := func(app cfacade.IApplication) {
  61. csnowflake.InitDefaultNode(app.NodeID())
  62. capp.Init(app)
  63. facadeInit.Load()
  64. // 当用户断开连接时,触发玩家退出消息
  65. sessions.SetOnUnbindFunc(func(playerID int64) {
  66. targetPath := cfacade.NewChildPath("", nameActor.Map_Player, playerID)
  67. capp.Call(targetPath, nameRemote.MapPlayer_OnSessionClosed, nil)
  68. })
  69. }
  70. return funcLoad.New("initBeforeFunc", fn)
  71. }
  72. func initAfterFunc() cfacade.IComponent {
  73. fn := func(app cfacade.IApplication) {
  74. initMap(app)
  75. }
  76. return funcLoad.New("initAfterFunc", fn)
  77. }
  78. // Init 初始化各地图actor的数据
  79. func initMap(app cfacade.IApplication) {
  80. if app.NodeType() != constant.NodeMap {
  81. clog.Fatalf("Node type error. nodeType =%s, nodeID = %s", capp.App().NodeType(), capp.NodeID())
  82. return
  83. }
  84. nodeTable, found := db.GetMapNodeTable(capp.NodeID())
  85. if !found {
  86. clog.Fatalf("NodeID not found. nodeID = %s", capp.NodeID())
  87. }
  88. // 加载玩家数据
  89. playerTables := db.LoadPlayerTables(capp.NodeID())
  90. if playerTables == nil {
  91. clog.Fatalf("Load player table fail. nodeID = %s", capp.NodeID())
  92. }
  93. // 加载联盟数据
  94. leagueTables := db.LoadLeagueTables(capp.NodeID())
  95. if leagueTables == nil {
  96. clog.Fatalf("Load league table fail. nodeID = %s", capp.NodeID())
  97. }
  98. // 初始化 联盟
  99. mapLeague.Init(app, leagueTables)
  100. // 初始化 侦察
  101. mapScoutTable, found := db.GetMapScoutTable(capp.NodeID())
  102. if !found {
  103. clog.Fatalf("Load map scout table fail. nodeID=%s", capp.NodeID())
  104. }
  105. scout.Init(app, mapScoutTable)
  106. // 加载交易所相关数据到缓存
  107. db.LoadMapExchangeStatsTables()
  108. exchangeDeliverTables := db.LoadMapExchangeDeliverTables()
  109. exchangeTables := db.LoadMapExchangeTables()
  110. mapExchange.Init(app, exchangeTables, exchangeDeliverTables)
  111. // 加载地编数据
  112. data.MapID.LoadData(capp.NodeID())
  113. // 加载地图数据
  114. mapTables := db.LoadLogicData(nodeTable)
  115. if mapTables == nil {
  116. clog.Fatalf("Load map data fail. nodeID = %s", capp.NodeID())
  117. }
  118. // 初始化 pathfind
  119. mapPathfind.Init(app, mapTables)
  120. // 初始化 AOI
  121. mapAOI.Init(app, mapTables)
  122. // 初始化 logic 数据
  123. mapLogic.Init(app, mapTables, playerTables, leagueTables)
  124. // 初始化 mapPlayer
  125. mapPlayer.Init(app)
  126. // 初始化 联邦
  127. mapUnion.Init(app)
  128. }