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. mapLeague "f1-game/nodes/map/league"
  18. mapLogic "f1-game/nodes/map/logic"
  19. "f1-game/nodes/map/ops"
  20. mapPathfind "f1-game/nodes/map/pathfind"
  21. mapPlayer "f1-game/nodes/map/player"
  22. "f1-game/nodes/map/rank"
  23. "f1-game/nodes/map/scout"
  24. mapSeason "f1-game/nodes/map/season"
  25. mapUnion "f1-game/nodes/map/union"
  26. "github.com/cherry-game/cherry"
  27. csnowflake "github.com/cherry-game/cherry/extend/snowflake"
  28. cfacade "github.com/cherry-game/cherry/facade"
  29. clog "github.com/cherry-game/cherry/logger"
  30. )
  31. func Run(node cfacade.INode) {
  32. app := cherry.ConfigureNode(
  33. node,
  34. false,
  35. cherry.Cluster,
  36. )
  37. app.Register(initBeforeFunc())
  38. app.Register(cgops.New())
  39. app.Register(data.New())
  40. app.Register(redis.NewClients(
  41. redis.GUID,
  42. redis.Game,
  43. ))
  44. app.Register(checkCenter.New())
  45. app.Register(db.NewMap())
  46. app.Register(initAfterFunc())
  47. app.AddActors(
  48. sessions.NewActor(true),
  49. genPool.NewActor(node.NodeID()),
  50. mapSeason.NewActor(),
  51. ops.NewActor(),
  52. rank.NewActor(),
  53. )
  54. app.ActorSystem().SetArrivalTimeout(50)
  55. app.ActorSystem().SetExecutionTimeout(50)
  56. app.Startup()
  57. }
  58. func initBeforeFunc() cfacade.IComponent {
  59. fn := func(app cfacade.IApplication) {
  60. csnowflake.InitDefaultNode(app.NodeID())
  61. capp.Init(app)
  62. mapPlayer.OnInitService()
  63. mapLeague.OnInitService()
  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. // 初始化 mapPlayer
  99. mapPlayer.Init(app, playerTables)
  100. // 初始化 联盟
  101. mapLeague.Init(app, leagueTables)
  102. // 加载交易所相关数据到缓存
  103. db.LoadMapExchangeStatsTables()
  104. exchangeDeliverTables := db.LoadMapExchangeDeliverTables()
  105. exchangeTables := db.LoadMapExchangeTables()
  106. mapExchange.Init(app, exchangeTables, exchangeDeliverTables)
  107. // 加载地编数据
  108. data.MapID.LoadData(capp.NodeID())
  109. // 加载地图数据
  110. mapTables := db.LoadLogicData(nodeTable)
  111. if mapTables == nil {
  112. clog.Fatalf("Load map data fail. nodeID = %s", capp.NodeID())
  113. }
  114. // 初始化 pathfind
  115. mapPathfind.Init(app, mapTables)
  116. // 初始化 AOI
  117. mapAOI.Init(app, mapTables)
  118. // 初始化 logic 数据
  119. mapLogic.Init(app, mapTables, playerTables, leagueTables)
  120. // 初始化 联邦
  121. mapUnion.Init(app)
  122. // 初始化 侦察
  123. mapScoutTable, found := db.GetMapScoutTable(capp.NodeID())
  124. if !found {
  125. clog.Fatalf("Load map scout table fail. nodeID=%s", capp.NodeID())
  126. }
  127. scout.Init(app, mapScoutTable)
  128. }