gost-plus

Форк
0
/
main.go 
98 строк · 1.8 Кб
1
package main
2

3
import (
4
	"context"
5
	"fmt"
6
	"log/slog"
7
	_ "net"
8
	"os"
9
	"time"
10

11
	"gioui.org/app"
12
	_ "gioui.org/app/permission/storage"
13
	"gioui.org/op"
14
	"github.com/go-gost/core/logger"
15
	"github.com/go-gost/gost.plus/config"
16
	"github.com/go-gost/gost.plus/runner"
17
	"github.com/go-gost/gost.plus/runner/task"
18
	"github.com/go-gost/gost.plus/tunnel"
19
	"github.com/go-gost/gost.plus/tunnel/entrypoint"
20
	"github.com/go-gost/gost.plus/ui"
21
	"github.com/go-gost/gost.plus/ui/page"
22
	"github.com/go-gost/gost.plus/ui/theme"
23
	"github.com/go-gost/gost.plus/ui/widget"
24
	_ "github.com/go-gost/gost.plus/winres"
25
)
26

27
func main() {
28
	Init()
29

30
	go func() {
31
		if err := run(); err != nil {
32
			logger.Default().Fatal(err)
33
		}
34
		os.Exit(0)
35
	}()
36
	app.Main()
37
}
38

39
func run() error {
40
	ui := ui.NewUI()
41

42
	go handleEvent(ui)
43

44
	w := ui.Window()
45
	var ops op.Ops
46
	for {
47
		switch e := w.Event().(type) {
48
		case app.DestroyEvent:
49
			tunnel.SaveConfig()
50
			entrypoint.SaveConfig()
51
			return e.Err
52
		case app.FrameEvent:
53
			gtx := app.NewContext(&ops, e)
54
			ui.Layout(gtx)
55
			e.Frame(gtx.Ops)
56
		}
57
	}
58
}
59

60
func handleEvent(ui *ui.UI) {
61
	for {
62
		select {
63
		case e := <-ui.Router().Event():
64
			switch e.ID {
65
			case page.EventThemeChanged:
66
				slog.Debug("theme changed", "event", e.ID)
67
				ui.Window().Option(app.StatusColor(theme.Current().Material.Bg))
68
			}
69

70
		case e := <-runner.Event():
71
			switch e.TaskID {
72
			case runner.TaskUpdateStats:
73
				ui.Window().Invalidate()
74

75
			default:
76
				if e.Err != nil {
77
					slog.Error(fmt.Sprintf("task: %s", e.Err), "task", e.TaskID)
78
					ui.Router().Notify(widget.Message{
79
						Type:    widget.Error,
80
						Content: e.Err.Error(),
81
					})
82
				}
83
			}
84
		}
85
	}
86
}
87

88
func Init() {
89
	config.Init()
90
	tunnel.LoadConfig()
91
	entrypoint.LoadConfig()
92

93
	runner.Exec(context.Background(), task.UpdateStats(),
94
		runner.WithAync(true),
95
		runner.WithInterval(time.Second),
96
		runner.WithCancel(true),
97
	)
98
}
99

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.