diff --git a/.gitignore b/.gitignore index 47c945834..ed80db982 100644 --- a/.gitignore +++ b/.gitignore @@ -45,3 +45,4 @@ public/logic-linux-amd64 public/login-linux-amd64 public/login-login-linux-amd64 +public/logic_linux-amd64_1 diff --git a/common/cool/coolconfig/config.go b/common/cool/coolconfig/config.go index b15c6ae2a..8b923dc85 100644 --- a/common/cool/coolconfig/config.go +++ b/common/cool/coolconfig/config.go @@ -6,11 +6,11 @@ import ( // cool config type sConfig struct { - AutoMigrate bool `json:"auto_migrate,omitempty"` // 是否自动创建表 - Eps bool `json:"eps,omitempty"` // 是否开启eps - File *file `json:"file,omitempty"` // 文件上传配置 - Name string `json:"name"` // 项目名称 - LoginPort string `json:"port"` + AutoMigrate bool `json:"auto_migrate,omitempty"` // 是否自动创建表 + Eps bool `json:"eps,omitempty"` // 是否开启eps + File *file `json:"file,omitempty"` // 文件上传配置 + Name string `json:"name"` // 项目名称 + // LoginPort string `json:"port"` GameOnlineID uint16 `json:"port_bl"` //这个是命令行输入的参数 ServerInfo ServerList @@ -70,9 +70,9 @@ func newConfig() *sConfig { AutoMigrate: GetCfgWithDefault(ctx, "blazing.autoMigrate", g.NewVar(false)).Bool(), Name: GetCfgWithDefault(ctx, "server.name", g.NewVar("")).String(), - Eps: GetCfgWithDefault(ctx, "blazing.eps", g.NewVar(false)).Bool(), - LoginPort: string(GetCfgWithDefault(ctx, "server.port", g.NewVar("8080")).String()), - Address: GetCfgWithDefault(ctx, "server.address", g.NewVar("8080")).String(), + Eps: GetCfgWithDefault(ctx, "blazing.eps", g.NewVar(false)).Bool(), + // LoginPort: string(GetCfgWithDefault(ctx, "server.port", g.NewVar("8080")).String()), + Address: GetCfgWithDefault(ctx, "server.address", g.NewVar("8080")).String(), //GamePort: GetCfgWithDefault(ctx, "server.game", g.NewVar("8080")).Uint64s(), File: &file{ diff --git a/common/utils/file.go b/common/utils/file.go new file mode 100644 index 000000000..0913568df --- /dev/null +++ b/common/utils/file.go @@ -0,0 +1,59 @@ +package utils + +import ( + "fmt" + "io/fs" + "os" + "path/filepath" + "strings" +) + +// GetLatestLogicFile 遍历指定目录,返回以logic_为前缀的最新修改文件路径 +// dirPath: 目标目录路径(绝对路径或相对路径均可) +func GetLatestLogicFile(dirPath string) (string, error) { + // 1. 读取目录下所有文件/目录项 + entries, err := os.ReadDir(dirPath) + if err != nil { + return "", fmt.Errorf("读取目录失败: %w", err) + } + + var ( + latestFile string // 记录最新文件的路径 + latestModTime fs.FileInfo // 记录最新文件的文件信息(用于对比时间) + ) + + // 2. 遍历所有目录项,筛选并对比 + for _, entry := range entries { + // 跳过目录,只处理普通文件 + if entry.IsDir() { + continue + } + + // 筛选以logic_开头的文件 + filename := entry.Name() + if !strings.HasPrefix(filename, "logic_") { + continue + } + + // 3. 获取文件的完整路径和详细信息(包含修改时间) + fileFullPath := filepath.Join(dirPath, filename) + fileInfo, err := os.Stat(fileFullPath) + if err != nil { + fmt.Printf("获取文件[%s]信息失败,跳过: %v\n", fileFullPath, err) + continue + } + + // 4. 对比修改时间,更新最新文件记录 + if latestModTime == nil || fileInfo.ModTime().After(latestModTime.ModTime()) { + latestFile = filename + latestModTime = fileInfo + } + } + + // 5. 处理无符合条件文件的情况 + if latestFile == "" { + return "", fmt.Errorf("目录[%s]下无符合条件的logic_前缀文件", dirPath) + } + + return latestFile, nil +} diff --git a/login/internal/cmd/cmd.go b/login/internal/cmd/cmd.go index a38fa2e5d..23a182375 100644 --- a/login/internal/cmd/cmd.go +++ b/login/internal/cmd/cmd.go @@ -35,7 +35,7 @@ var ( panic(err) } //go robot() - go reg() + //go reg() s := g.Server() s.Use(Limiter, ghttp.MiddlewareHandlerResponse) s.EnableAdmin() diff --git a/login/internal/cmd/reg.go b/login/internal/cmd/reg.go index f7382b591..7f80e7102 100644 --- a/login/internal/cmd/reg.go +++ b/login/internal/cmd/reg.go @@ -1,22 +1,14 @@ package cmd -import ( - "blazing/common/socket" - "blazing/cool" - "blazing/logic/controller" +// var defaultPort = gconv.Int(cool.Config.LoginPort) //读入默认的端口 +// func reg() { +// // go rpc.StartServer() +// controller.Init(false) +// //go rpcserver() //对login tcp启动 +// //ants.Submit(rpcserver) +// socket.NewServer( +// socket.WithCORS(), +// socket.WithPort(defaultPort), +// ).Boot() - "github.com/gogf/gf/v2/util/gconv" -) - -var defaultPort = gconv.Int(cool.Config.LoginPort) //读入默认的端口 -func reg() { - // go rpc.StartServer() - controller.Init(false) - //go rpcserver() //对login tcp启动 - //ants.Submit(rpcserver) - socket.NewServer( - socket.WithCORS(), - socket.WithPort(defaultPort), - ).Boot() - -} +// } diff --git a/modules/base/controller/admin/admin.go b/modules/base/controller/admin/admin.go index d78da5da3..2df93b84e 100644 --- a/modules/base/controller/admin/admin.go +++ b/modules/base/controller/admin/admin.go @@ -1 +1,21 @@ package admin + +import ( + "blazing/common/utils" + "blazing/cool" + "context" + + "github.com/gogf/gf/v2/frame/g" +) + +type CurVersionReq struct { + g.Meta `path:"/version" method:"POST"` + Authorization string `json:"Authorization" in:"header"` +} + +// Logout BaseCommLogout 方法 +func (c *BaseCommController) Version(ctx context.Context, req *CurVersionReq) (res *cool.BaseRes, err error) { + filename, _ := utils.GetLatestLogicFile("public") + res = cool.Ok(filename) + return +} diff --git a/modules/base/middleware/server.go b/modules/base/middleware/server.go index f478315a5..a9e5ca028 100644 --- a/modules/base/middleware/server.go +++ b/modules/base/middleware/server.go @@ -1,6 +1,8 @@ package middleware import ( + "blazing/common/utils" + "blazing/cool" "blazing/modules/config/model" config "blazing/modules/config/service" "bufio" @@ -148,13 +150,18 @@ func (s *ServerHandler) executeScript(scriptContent, scriptName string) (string, return strings.TrimSpace(output), nil } } + func (s *ServerHandler) executeFullDeployment() error { s.sendTerminalOutput(s.session.WebSocket, "开始执行完整自动化部署流程...") // 1. 获取并校验下载链接 - filename := config.NewServerService().GetFile() - fileURL := "http://sun.72wo.cn/" + filename + // filename := config.NewServerService().GetFile() + filename, _ := utils.GetLatestLogicFile("public") + // fileURL := "http://sun.72wo.cn/" + filename + fileURL := "http://" + cool.Config.File.Domain + cool.Config.Address + "/" + filename + fileURL = strings.TrimSpace(fileURL) + fmt.Println("更新地址", fileURL) if fileURL == "" { return fmt.Errorf("下载链接为空") } diff --git a/public/logic-linux-amd64_1 b/public/logic-linux-amd64_1 deleted file mode 100644 index f95e74e86..000000000 Binary files a/public/logic-linux-amd64_1 and /dev/null differ