85 lines
1.8 KiB
Go
85 lines
1.8 KiB
Go
package cmd
|
|
|
|
import (
|
|
"context"
|
|
"epic/internal/controller/cron"
|
|
"epic/internal/controller/hero"
|
|
"epic/internal/logic/i18n"
|
|
"epic/internal/service"
|
|
"epic/internal/util"
|
|
"github.com/gogf/gf/v2/frame/g"
|
|
"github.com/gogf/gf/v2/net/ghttp"
|
|
"github.com/gogf/gf/v2/os/gcmd"
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
)
|
|
|
|
func CORS(r *ghttp.Request) {
|
|
r.Response.CORSDefault()
|
|
r.Middleware.Next()
|
|
}
|
|
|
|
var (
|
|
Main = gcmd.Command{
|
|
Name: "main",
|
|
Usage: "main",
|
|
Brief: "start http server",
|
|
Func: func(ctx context.Context, parser *gcmd.Parser) (err error) {
|
|
// 初始化i18n服务
|
|
InitI18nService(ctx)
|
|
|
|
// 启动定时任务
|
|
if err := service.Cron().StartAllJobs(ctx); err != nil {
|
|
g.Log().Error(ctx, "Failed to start cron jobs:", err)
|
|
return err
|
|
}
|
|
|
|
// 设置优雅关闭
|
|
setupGracefulShutdown(ctx)
|
|
|
|
s := g.Server()
|
|
s.Use(CORS)
|
|
s.Group("/", func(group *ghttp.RouterGroup) {
|
|
group.Middleware(ghttp.MiddlewareHandlerResponse)
|
|
group.Bind(
|
|
hero.NewV1(),
|
|
cron.NewV1(),
|
|
)
|
|
})
|
|
s.Run()
|
|
return nil
|
|
},
|
|
}
|
|
)
|
|
|
|
// setupGracefulShutdown 设置优雅关闭
|
|
func setupGracefulShutdown(ctx context.Context) {
|
|
// 创建信号通道
|
|
sigChan := make(chan os.Signal, 1)
|
|
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
|
|
|
|
// 在后台监听信号
|
|
go func() {
|
|
sig := <-sigChan
|
|
g.Log().Infof(ctx, "Received signal: %v, shutting down gracefully...", sig)
|
|
|
|
// 停止定时任务
|
|
if err := service.Cron().StopAllJobs(ctx); err != nil {
|
|
g.Log().Error(ctx, "Failed to stop cron jobs:", err)
|
|
}
|
|
|
|
// 退出程序
|
|
os.Exit(0)
|
|
}()
|
|
}
|
|
|
|
// InitI18nService 初始化i18n服务
|
|
func InitI18nService(ctx context.Context) {
|
|
// 启动i18n自动刷新
|
|
i18nLogic := i18n.New()
|
|
i18nLogic.StartAutoRefresh(ctx)
|
|
|
|
util.Info(ctx, "i18n服务初始化完成")
|
|
}
|