ops.go 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package ops
  2. import (
  3. "embed"
  4. cherryApp "f1-game/internal/cherry_app"
  5. funcLoad "f1-game/internal/component/func_load"
  6. cgops "f1-game/internal/component/gops"
  7. "f1-game/internal/component/rate"
  8. "f1-game/internal/data"
  9. "f1-game/nodes/ops/controller"
  10. "io/fs"
  11. "net/http"
  12. "github.com/cherry-game/cherry"
  13. csnowflake "github.com/cherry-game/cherry/extend/snowflake"
  14. cfacade "github.com/cherry-game/cherry/facade"
  15. cgin "github.com/cherry-game/components/gin"
  16. )
  17. func Run(node cfacade.INode) {
  18. app := cherry.ConfigureNode(
  19. node,
  20. false,
  21. cherry.Cluster,
  22. )
  23. app.Register(initFunc())
  24. app.Register(cgops.New())
  25. app.Register(data.New())
  26. app.Register(newOpsServer(app))
  27. app.Startup()
  28. }
  29. func initFunc() cfacade.IComponent {
  30. fn := func(app cfacade.IApplication) {
  31. csnowflake.InitDefaultNode(app.NodeID())
  32. cherryApp.Init(app)
  33. }
  34. return funcLoad.New("initFunc", fn)
  35. }
  36. //go:embed static/*
  37. var staticFS embed.FS
  38. func newOpsServer(app *cherry.AppBuilder) *cgin.Component {
  39. opsServer := cgin.NewHttp("ops_http_server", app.Address())
  40. opsServer.Use(cgin.Cors())
  41. opsServer.Use(cgin.RecoveryWithZap(true))
  42. opsServer.Use(rate.GinRateWithIP())
  43. opsServer.Register(controller.List()...)
  44. // 静态文件服务
  45. // opsServer.Static("/static", "./static")
  46. subFS, err := fs.Sub(staticFS, "static")
  47. if err != nil {
  48. panic(err)
  49. }
  50. opsServer.StaticFS("/static", http.FS(subFS))
  51. return opsServer
  52. }