game.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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/player"
  21. "runtime"
  22. "github.com/cherry-game/cherry"
  23. csnowflake "github.com/cherry-game/cherry/extend/snowflake"
  24. cutils "github.com/cherry-game/cherry/extend/utils"
  25. cfacade "github.com/cherry-game/cherry/facade"
  26. )
  27. func Run(node cfacade.INode) {
  28. if !cutils.IsNumeric(node.NodeID()) {
  29. panic("node id must number.")
  30. }
  31. app := cherry.ConfigureNode(
  32. node,
  33. false,
  34. cherry.Cluster,
  35. )
  36. app.Register(initBeforeFunc())
  37. app.Register(cgops.New())
  38. app.Register(data.New())
  39. app.Register(redis.New())
  40. app.Register(checkCenter.New())
  41. app.Register(db.NewGame())
  42. app.Register(sdk.New())
  43. //app.Register(loopping.New()) // loop ping test component
  44. app.AddActors(
  45. sessions.NewActor(true),
  46. ops.NewActor(),
  47. genPool.NewActor(node.NodeID()),
  48. mail.NewActor(runtime.NumGoroutine()*2),
  49. player.NewActor(),
  50. login.NewActor(runtime.NumGoroutine()*2),
  51. marquee.NewActor(),
  52. )
  53. app.ActorSystem().SetArrivalTimeout(50)
  54. app.ActorSystem().SetExecutionTimeout(50)
  55. app.Startup()
  56. }
  57. func initBeforeFunc() cfacade.IComponent {
  58. fn := func(app cfacade.IApplication) {
  59. csnowflake.InitDefaultNode(app.NodeID())
  60. cherryApp.Init(app)
  61. facadeInit.Load()
  62. // 当用户断开连接时,触发玩家退出消息
  63. sessions.SetOnUnbindFunc(func(playerID int64) {
  64. targetPath := cfacade.NewChildPath("", nameActor.GamePlayer, playerID)
  65. cherryApp.Call(targetPath, nameRemote.Player_OnSessionClosed, nil)
  66. })
  67. }
  68. return funcLoad.New("initBeforeFunc", fn)
  69. }