|
@@ -3,120 +3,49 @@ package main
|
|
|
import (
|
|
|
"cr-launcher/utils"
|
|
|
"fmt"
|
|
|
- "math/rand"
|
|
|
"os/exec"
|
|
|
- "time"
|
|
|
-
|
|
|
- "github.com/fatih/color"
|
|
|
- "github.com/vbauerster/mpb/v8"
|
|
|
- "github.com/vbauerster/mpb/v8/decor"
|
|
|
+ "path"
|
|
|
)
|
|
|
|
|
|
func main() {
|
|
|
|
|
|
- // fmt.Println("xxxxxxxxxxxxx")
|
|
|
- // http 获取版本信息
|
|
|
- // 比较远程版本与本地版本
|
|
|
- // http下载文件,更新版本信息
|
|
|
-
|
|
|
- // 解压
|
|
|
- // err := utils.WriteConfig(&utils.Config{
|
|
|
- // Version: "2.0.0",
|
|
|
- // Url: "http://www.baidu.com",
|
|
|
- // })
|
|
|
- // fmt.Println(err)
|
|
|
- // fmt.Println(config)
|
|
|
- // fmt.Println(path.Base("http://www.dddfd.com/windows.zip"))
|
|
|
- version, err := utils.GetLatest("http://127.0.0.1:8085/cr/version/latest")
|
|
|
- config, _ := utils.ReadConfig()
|
|
|
- if config == nil {
|
|
|
- // fmt.Println(err)
|
|
|
+ config, err := utils.ReadConfig()
|
|
|
+ if err != nil {
|
|
|
fmt.Println("配置文件错误")
|
|
|
return
|
|
|
}
|
|
|
+ url := ""
|
|
|
+ if config != nil {
|
|
|
+ url = config.Url
|
|
|
+ }
|
|
|
+
|
|
|
+ version, err := utils.GetLatest(url)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println("获取版本信息错误")
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
// 服务器最新版本有变动 更新
|
|
|
if version.Version != config.Version {
|
|
|
- // todo
|
|
|
+ // 下载
|
|
|
+ utils.DownloadZip(version.Url)
|
|
|
+ // 解压
|
|
|
fmt.Println("更新")
|
|
|
+ fileName := path.Base(version.Url)
|
|
|
+ err := utils.Unzip(fileName)
|
|
|
+ if err != nil {
|
|
|
+ fmt.Println(err)
|
|
|
+ return
|
|
|
+ }
|
|
|
}
|
|
|
// 运行应用程序
|
|
|
- cmd := exec.Command("data/cr.exe")
|
|
|
+ cmd := exec.Command(config.ExePath)
|
|
|
data, err := cmd.Output()
|
|
|
if err != nil {
|
|
|
fmt.Println(err)
|
|
|
fmt.Println("启动失败")
|
|
|
return
|
|
|
}
|
|
|
- fmt.Println(data)
|
|
|
+ fmt.Println(string(data))
|
|
|
fmt.Println("启动成功")
|
|
|
-
|
|
|
- fmt.Println(err)
|
|
|
- fmt.Println(config)
|
|
|
-
|
|
|
- // to support color in Windows following both options are required
|
|
|
- p := mpb.New(
|
|
|
- mpb.WithOutput(color.Output),
|
|
|
- mpb.WithAutoRefresh(),
|
|
|
- )
|
|
|
-
|
|
|
- red, green := color.New(color.FgRed), color.New(color.FgGreen)
|
|
|
-
|
|
|
- fmt.Println("应用更新中...")
|
|
|
- task := "windows.zip"
|
|
|
- queue := make([]*mpb.Bar, 2)
|
|
|
- queue[0] = p.AddBar(rand.Int63n(201)+100,
|
|
|
- mpb.PrependDecorators(
|
|
|
- decor.Name(task, decor.WC{C: decor.DindentRight | decor.DextraSpace}),
|
|
|
- decor.Name("下载中:", decor.WCSyncSpaceR),
|
|
|
- decor.CountersNoUnit("%d / %d", decor.WCSyncWidth),
|
|
|
- ),
|
|
|
- mpb.AppendDecorators(
|
|
|
- decor.OnComplete(decor.Percentage(decor.WC{W: 5}), "done"),
|
|
|
- ),
|
|
|
- )
|
|
|
- queue[1] = p.AddBar(rand.Int63n(101)+100,
|
|
|
- mpb.BarQueueAfter(queue[0]), // this bar is queued
|
|
|
- mpb.BarFillerClearOnComplete(),
|
|
|
- mpb.PrependDecorators(
|
|
|
- decor.Name(task, decor.WC{C: decor.DindentRight | decor.DextraSpace}),
|
|
|
- decor.OnCompleteMeta(
|
|
|
- decor.OnComplete(
|
|
|
- decor.Meta(decor.Name("安装中:", decor.WCSyncSpaceR), toMetaFunc(red)),
|
|
|
- "更新完成!",
|
|
|
- ),
|
|
|
- toMetaFunc(green),
|
|
|
- ),
|
|
|
- decor.OnComplete(decor.EwmaETA(decor.ET_STYLE_MMSS, 0, decor.WCSyncWidth), ""),
|
|
|
- ),
|
|
|
- mpb.AppendDecorators(
|
|
|
- decor.OnComplete(decor.Percentage(decor.WC{W: 5}), ""),
|
|
|
- ),
|
|
|
- )
|
|
|
-
|
|
|
- go func() {
|
|
|
- for _, b := range queue {
|
|
|
- complete(b)
|
|
|
- }
|
|
|
- }()
|
|
|
-
|
|
|
- p.Wait()
|
|
|
-
|
|
|
-}
|
|
|
-
|
|
|
-func complete(bar *mpb.Bar) {
|
|
|
- max := 100 * time.Millisecond
|
|
|
- for !bar.Completed() {
|
|
|
- // start variable is solely for EWMA calculation
|
|
|
- // EWMA's unit of measure is an iteration's duration
|
|
|
- start := time.Now()
|
|
|
- time.Sleep(time.Duration(rand.Intn(10)+1) * max / 10)
|
|
|
- // we need to call EwmaIncrement to fulfill ewma decorator's contract
|
|
|
- bar.EwmaIncrInt64(rand.Int63n(5)+1, time.Since(start))
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-func toMetaFunc(c *color.Color) func(string) string {
|
|
|
- return func(s string) string {
|
|
|
- return c.Sprint(s)
|
|
|
- }
|
|
|
}
|