Files
goodlink/ui2/start.go
kony c7bc4b9c4f u
2025-03-28 17:23:38 +08:00

198 lines
4.6 KiB
Go

//go:build windows
package ui2
import (
"encoding/json"
"gogo"
"log"
"sync"
"time"
"goodlink/config"
"goodlink/pro"
_ "goodlink/pro"
_ "embed"
_ "net/http/pprof"
"fyne.io/fyne/v2/widget"
)
var (
m_mg_start sync.WaitGroup
m_lock_start sync.Mutex
m_button_start *widget.Button
m_activity_start_button *widget.Activity
m_stats_start_button int
)
func disable_other(content string) {
m_radio_work_type.Disable()
m_validated_key.Disable()
m_ui_local.Disable()
m_ui_remote.Disable()
m_button_key_create.Disable()
m_button_key_paste.Disable()
m_activity_start_button.Start()
m_activity_start_button.Show()
UILogPrintF(content)
m_stats_start_button = 1
}
func enable_other() {
m_radio_work_type.Enable()
m_validated_key.Enable()
m_ui_local.Enable()
m_ui_remote.Enable()
m_button_key_create.Enable()
m_button_key_paste.Enable()
m_activity_start_button.Stop()
m_activity_start_button.Hide()
}
func start_button_click() {
m_lock_start.Lock()
defer m_lock_start.Unlock()
//先对需要填写的数据进行校验
switch m_stats_start_button {
case 0:
if len(m_validated_key.Text) < 16 {
SetLogLabel("请输入或点击生成连接密钥!")
return
}
switch m_radio_work_type.Selected {
case "Local":
if m_ui_local.GetLocalPort() == "" {
//SetLogLabel("请填写访问端口号")
//return
}
case "Remote":
switch m_ui_remote.GetRemoteType() {
case "代理模式":
case "转发模式":
}
}
// 保存配置文件, 下次启动加载
configByte, _ := json.Marshal(&config.ConfigInfo{
WorkType: m_radio_work_type.Selected,
TunKey: m_validated_key.Text,
ConnType: m_ui_local.GetConnType2(),
LocalIP: m_ui_local.GetLocalIP(),
LocalPort: m_ui_local.GetLocalPort(),
RemoteType: m_ui_remote.GetRemoteType(),
RemoteIP: m_ui_remote.GetRemoteIP(),
RemotePort: m_ui_remote.GetRemotePort(),
})
log.Println(string(configByte))
gogo.Utils().FileDel("goodlink.json")
gogo.Utils().FileAppend("goodlink.json", configByte)
}
switch m_stats_start_button {
case 0:
m_button_start.Disable()
disable_other("正在启动...")
switch m_radio_work_type.Selected {
case "Local":
m_mg_start.Add(1)
go func() {
defer func() {
m_activity_start_button.Stop()
m_activity_start_button.Hide()
m_mg_start.Done()
}()
time.Sleep(time.Second * 1)
if m_stats_start_button != 1 {
return
}
m_button_start.Enable()
m_button_start.Importance = widget.WarningImportance
m_button_start.SetText("关闭连接")
for m_stats_start_button == 1 {
switch pro.GetLocalStats() {
case 1:
m_activity_start_button.Start()
m_activity_start_button.Show()
m_button_start.Importance = widget.WarningImportance
m_button_start.Refresh()
case 2:
m_activity_start_button.Stop()
m_activity_start_button.Hide()
m_button_start.Importance = widget.SuccessImportance
m_button_start.Refresh()
}
time.Sleep(time.Second * 1)
}
}()
m_mg_start.Add(1)
go func() {
defer m_mg_start.Done()
if err := pro.RunLocal(m_validated_key.Text); err != nil {
SetLogLabel(err.Error())
}
m_stats_start_button = 0
m_button_start.Importance = widget.HighImportance
m_button_start.SetText("点击启动")
m_button_start.Enable()
enable_other()
}()
case "Remote":
m_mg_start.Add(1)
go func() {
defer m_mg_start.Done()
time.Sleep(time.Second * 1)
m_log_label.SetText("启动成功")
m_button_start.Importance = widget.SuccessImportance
m_button_start.SetText("点击停止")
m_activity_start_button.Stop()
m_activity_start_button.Hide()
m_button_start.Enable()
}()
m_mg_start.Add(1)
go func() {
defer m_mg_start.Done()
if err := pro.RunRemote(m_validated_key.Text); err != nil {
SetLogLabel(err.Error())
}
m_stats_start_button = 0
m_button_start.Importance = widget.HighImportance
m_button_start.SetText("点击启动")
enable_other()
}()
}
case 1:
m_button_start.Disable()
UILogPrintF("正在停止...")
m_stats_start_button = 0
switch m_radio_work_type.Selected {
case "Local":
go func() {
pro.StopLocal()
}()
case "Remote":
go func() {
pro.StopRemote()
}()
}
m_mg_start.Wait()
enable_other()
UILogPrintF("等待启动")
m_button_start.Importance = widget.HighImportance
m_button_start.SetText("点击启动")
m_button_start.Enable()
}
}