diff --git a/README.md b/README.md index 5b3ad72a..307fb8c9 100644 --- a/README.md +++ b/README.md @@ -3,13 +3,17 @@ hk4e game server ## 开发快速上手 + * Go >= 1.19 + 1. 首次需要安装工具 `make dev_tool` 1. 生成协议 `make gen` ## 快速运行 + * mongodb * nats-server + 1. 启动dispatch `cd dispatch/cmd && go run .` 1. 启动gate `cd gate/cmd && go run .` 1. 启动gs `cd gs/cmd && go run .` diff --git a/dispatch/controller/controller.go b/dispatch/controller/controller.go index 6f0fda3f..035b4c56 100644 --- a/dispatch/controller/controller.go +++ b/dispatch/controller/controller.go @@ -40,28 +40,16 @@ func NewController(dao *dao.Dao) (r *Controller) { return nil } r.regionListBase64 = base64.StdEncoding.EncodeToString(regionListModify) - r.runEngine() + go r.registerRouter() return r } -func (c *Controller) runEngine() { +func (c *Controller) registerRouter() { if config.CONF.Logger.Level == "DEBUG" { gin.SetMode(gin.DebugMode) } else { gin.SetMode(gin.ReleaseMode) } - go func() { - engine := c.registerRouter() - port := config.CONF.HttpPort - addr := ":" + strconv.FormatInt(int64(port), 10) - err := engine.Run(addr) - if err != nil { - logger.LOG.Error("gin run error: %v", err) - } - }() -} - -func (c *Controller) registerRouter() *gin.Engine { engine := gin.Default() { // 404 @@ -140,5 +128,10 @@ func (c *Controller) registerRouter() *gin.Engine { engine.GET("/pictures/gt/a330cf996/slice/86f9db021.png", c.slicePng) engine.GET("/static/ant/sprite2x.1.2.6.png", c.sprite2xPng) } - return engine + port := config.CONF.HttpPort + addr := ":" + strconv.Itoa(port) + err := engine.Run(addr) + if err != nil { + logger.LOG.Error("gin run error: %v", err) + } } diff --git a/gm/cmd/application.toml b/gm/cmd/application.toml new file mode 100644 index 00000000..7cb48b62 --- /dev/null +++ b/gm/cmd/application.toml @@ -0,0 +1,12 @@ +http_port = 9001 + +[logger] +level = "DEBUG" +method = "CONSOLE" +track_line = true + +[database] +url = "mongodb://mongo:27017" + +[mq] +nats_url = "nats://nats1:4222,nats://nats2:4222,nats://nats3:4222" diff --git a/gm/cmd/main.go b/gm/cmd/main.go new file mode 100644 index 00000000..d047bfb3 --- /dev/null +++ b/gm/cmd/main.go @@ -0,0 +1,37 @@ +package main + +import ( + "hk4e/common/config" + "hk4e/gm/controller" + "hk4e/logger" + "os" + "os/signal" + "syscall" + "time" +) + +func main() { + filePath := "./application.toml" + config.InitConfig(filePath) + + logger.InitLogger("gm") + logger.LOG.Info("gm start") + + _ = controller.NewController() + + c := make(chan os.Signal, 1) + signal.Notify(c, syscall.SIGHUP, syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT) + for { + s := <-c + logger.LOG.Info("get a signal %s", s.String()) + switch s { + case syscall.SIGQUIT, syscall.SIGTERM, syscall.SIGINT: + logger.LOG.Info("gm exit") + time.Sleep(time.Second) + return + case syscall.SIGHUP: + default: + return + } + } +} diff --git a/gm/controller/controller.go b/gm/controller/controller.go new file mode 100644 index 00000000..c0566000 --- /dev/null +++ b/gm/controller/controller.go @@ -0,0 +1,51 @@ +package controller + +import ( + "github.com/gin-gonic/gin" + "hk4e/common/config" + "hk4e/logger" + "net/http" + "strconv" +) + +type Controller struct { +} + +func NewController() (r *Controller) { + r = new(Controller) + go r.registerRouter() + return r +} + +func (c *Controller) authorize() gin.HandlerFunc { + return func(context *gin.Context) { + if true { + // 验证通过 + context.Next() + return + } + // 验证不通过 + context.Abort() + context.JSON(http.StatusOK, gin.H{ + "code": "10001", + "msg": "没有访问权限", + }) + } +} + +func (c *Controller) registerRouter() { + if config.CONF.Logger.Level == "DEBUG" { + gin.SetMode(gin.DebugMode) + } else { + gin.SetMode(gin.ReleaseMode) + } + engine := gin.Default() + engine.Use(c.authorize()) + engine.POST("/gm/cmd", c.gmCmd) + port := config.CONF.HttpPort + addr := ":" + strconv.Itoa(port) + err := engine.Run(addr) + if err != nil { + logger.LOG.Error("gin run error: %v", err) + } +} diff --git a/gm/controller/gm_controller.go b/gm/controller/gm_controller.go new file mode 100644 index 00000000..bc1aa647 --- /dev/null +++ b/gm/controller/gm_controller.go @@ -0,0 +1,20 @@ +package controller + +import ( + "github.com/gin-gonic/gin" + "hk4e/logger" +) + +type GmCmdReq struct { + FuncName string `json:"func_name"` + Param []string `json:"param"` +} + +func (c *Controller) gmCmd(context *gin.Context) { + gmCmdReq := new(GmCmdReq) + err := context.ShouldBindJSON(gmCmdReq) + if err != nil { + return + } + logger.LOG.Info("%v", gmCmdReq) +}