From b73e4173a3c1e69e02ad6b4e3b43e425e57a5be9 Mon Sep 17 00:00:00 2001 From: MHSanaei Date: Thu, 9 Feb 2023 22:48:06 +0330 Subject: 3x-ui --- web/controller/server.go | 85 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 web/controller/server.go (limited to 'web/controller/server.go') diff --git a/web/controller/server.go b/web/controller/server.go new file mode 100644 index 00000000..d59b3400 --- /dev/null +++ b/web/controller/server.go @@ -0,0 +1,85 @@ +package controller + +import ( + "github.com/gin-gonic/gin" + "time" + "x-ui/web/global" + "x-ui/web/service" +) + +type ServerController struct { + BaseController + + serverService service.ServerService + + lastStatus *service.Status + lastGetStatusTime time.Time + + lastVersions []string + lastGetVersionsTime time.Time +} + +func NewServerController(g *gin.RouterGroup) *ServerController { + a := &ServerController{ + lastGetStatusTime: time.Now(), + } + a.initRouter(g) + a.startTask() + return a +} + +func (a *ServerController) initRouter(g *gin.RouterGroup) { + g = g.Group("/server") + + g.Use(a.checkLogin) + g.POST("/status", a.status) + g.POST("/getXrayVersion", a.getXrayVersion) + g.POST("/installXray/:version", a.installXray) +} + +func (a *ServerController) refreshStatus() { + a.lastStatus = a.serverService.GetStatus(a.lastStatus) +} + +func (a *ServerController) startTask() { + webServer := global.GetWebServer() + c := webServer.GetCron() + c.AddFunc("@every 2s", func() { + now := time.Now() + if now.Sub(a.lastGetStatusTime) > time.Minute*3 { + return + } + a.refreshStatus() + }) +} + +func (a *ServerController) status(c *gin.Context) { + a.lastGetStatusTime = time.Now() + + jsonObj(c, a.lastStatus, nil) +} + +func (a *ServerController) getXrayVersion(c *gin.Context) { + now := time.Now() + if now.Sub(a.lastGetVersionsTime) <= time.Minute { + jsonObj(c, a.lastVersions, nil) + return + } + + versions, err := a.serverService.GetXrayVersions() + if err != nil { + jsonMsg(c, I18n(c , "getVersion"), err) + return + } + + a.lastVersions = versions + a.lastGetVersionsTime = time.Now() + + jsonObj(c, versions, nil) +} + +func (a *ServerController) installXray(c *gin.Context) { + version := c.Param("version") + err := a.serverService.UpdateXray(version) + jsonMsg(c, I18n(c , "install") + " xray", err) +} -- cgit v1.2.3