123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- 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"
- )
- 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)
- fmt.Println("配置文件错误")
- return
- }
- // 服务器最新版本有变动 更新
- if version.Version != config.Version {
- // todo
- fmt.Println("更新")
- }
- // 运行应用程序
- cmd := exec.Command("data/cr.exe")
- data, err := cmd.Output()
- if err != nil {
- fmt.Println(err)
- fmt.Println("启动失败")
- return
- }
- fmt.Println(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)
- }
- }
|