You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
1.9 KiB
85 lines
1.9 KiB
package global
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"github.com/gin-gonic/gin"
|
|
"go.uber.org/zap"
|
|
"net/http"
|
|
"path/filepath"
|
|
"ycmediakit/internal/app/ffmpeg"
|
|
"ycmediakit/internal/pkg/config"
|
|
"ycmediakit/internal/pkg/logger"
|
|
"ycmediakit/internal/pkg/util"
|
|
"ycmediakit/middleware"
|
|
)
|
|
|
|
var (
|
|
RunConfig *config.RunConfig
|
|
AppConfig *config.AppConfig
|
|
Logger *zap.Logger
|
|
Ctx context.Context
|
|
engine *gin.Engine
|
|
)
|
|
|
|
func init() {
|
|
initConfig()
|
|
initLogger()
|
|
initEngine()
|
|
}
|
|
|
|
func initConfig() {
|
|
rCfg := config.NewRunConfig()
|
|
aCfg := config.NewAppConfig(rCfg)
|
|
RunConfig = rCfg
|
|
AppConfig = aCfg
|
|
}
|
|
|
|
func initLogger() {
|
|
lCfg := &RunConfig.Log
|
|
if !lCfg.Separate {
|
|
Logger = zap.New(logger.NewCore(lCfg), zap.AddCaller()) //AddCaller()为显示文件名和行号
|
|
} else {
|
|
Logger = zap.New(logger.NewMultiCore(lCfg), zap.AddCaller()) //AddCaller()为显示文件名和行号
|
|
}
|
|
zap.ReplaceGlobals(Logger) // 替换 zap 库中全局变量,可以直接通过 zap.L() 访问
|
|
}
|
|
|
|
func initEngine() {
|
|
if !RunConfig.Debug {
|
|
gin.SetMode(gin.ReleaseMode)
|
|
}
|
|
engine = gin.New()
|
|
engine.Use(middleware.Cors())
|
|
engine.Use(middleware.GinLogger(Logger), middleware.GinRecovery(Logger, true))
|
|
engine.Use(middleware.HttpInterceptor())
|
|
engineBindFS()
|
|
engineBindRouters()
|
|
}
|
|
|
|
func engineBindFS() {
|
|
fCfg := &AppConfig.Ffmpeg
|
|
hlsPath := filepath.Join(util.GetWorkPath(), fCfg.ToHls.HlsRoot)
|
|
_, _ = util.CheckDir(hlsPath)
|
|
engine.StaticFS("/"+fCfg.ToHls.HlsRoot, http.Dir(hlsPath))
|
|
}
|
|
|
|
func engineBindRouters() {
|
|
fCfg := &AppConfig.Ffmpeg
|
|
group := engine.Group("/ffmpeg")
|
|
group.Use(middleware.ProbePayloadInterceptor())
|
|
ffmpeg.Init(fCfg)
|
|
ffmpeg.BindRouters(group)
|
|
}
|
|
|
|
func Run(ctx context.Context) {
|
|
Ctx = ctx
|
|
port := AppConfig.Server.Port
|
|
runMsg := "Listening and serving HTTP on :" + port
|
|
fmt.Printf(runMsg + "\n")
|
|
Logger.Info(runMsg)
|
|
if err := engine.Run(":" + port); err != nil {
|
|
Logger.Error(err.Error())
|
|
return
|
|
}
|
|
}
|
|
|