game.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package game
  2. import (
  3. cherryApp "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/component/sdk"
  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. "f1-game/nodes/game/internal/db"
  15. facadeInit "f1-game/nodes/game/internal/facade/init"
  16. "f1-game/nodes/game/login"
  17. "f1-game/nodes/game/mail"
  18. "f1-game/nodes/game/marquee"
  19. "f1-game/nodes/game/ops"
  20. "f1-game/nodes/game/order"
  21. "f1-game/nodes/game/player"
  22. "runtime"
  23. "github.com/cherry-game/cherry"
  24. csnowflake "github.com/cherry-game/cherry/extend/snowflake"
  25. cutils "github.com/cherry-game/cherry/extend/utils"
  26. cfacade "github.com/cherry-game/cherry/facade"
  27. )
  28. func Run(node cfacade.INode) {
  29. if !cutils.IsNumeric(node.NodeID()) {
  30. panic("node id must number.")
  31. }
  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.New())
  41. app.Register(checkCenter.New())
  42. app.Register(db.NewGame())
  43. app.Register(sdk.New())
  44. //app.Register(loopping.New()) // loop ping test component
  45. app.AddActors(
  46. sessions.NewActor(true),
  47. ops.NewActor(),
  48. genPool.NewActor(node.NodeID()),
  49. mail.NewActor(runtime.NumGoroutine()*2),
  50. player.NewActor(),
  51. login.NewActor(runtime.NumGoroutine()*2),
  52. marquee.NewActor(),
  53. order.NewActor(512),
  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. cherryApp.Init(app)
  63. facadeInit.Load()
  64. // 当用户断开连接时,触发玩家退出消息
  65. sessions.SetOnUnbindFunc(func(playerID int64) {
  66. targetPath := cfacade.NewChildPath("", nameActor.GamePlayer, playerID)
  67. cherryApp.Call(targetPath, nameRemote.Player_OnSessionClosed, nil)
  68. })
  69. }
  70. return funcLoad.New("initBeforeFunc", fn)
  71. }