b1.0
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
// Copyright (c) 2026 S.A. (SNOWARE). Written for SCU Team.
|
||||
// Licensed under MulanPubL-2.0.
|
||||
// You may obtain a copy at: http://license.coscl.org.cn/MulanPubL-2.0
|
||||
// THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND.
|
||||
|
||||
// main 包:SRemoteConnectClient 主入口,负责 UAC 提权、启动 EasyTier 子进程、系统托盘管理。
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"os/exec"
|
||||
|
||||
"github.com/getlantern/systray"
|
||||
)
|
||||
|
||||
// proc 保存 EasyTier 子进程的引用,用于退出时清理。
|
||||
var proc *os.Process = nil
|
||||
|
||||
// main 程序入口:初始化日志 → 隐藏控制台 → UAC 提权 → 启动 EasyTier → 系统托盘。
|
||||
func main() {
|
||||
initLogger()
|
||||
log.Info().Msg("程序启动")
|
||||
|
||||
hideConsoleWindow()
|
||||
|
||||
p := NewPermission()
|
||||
if !p.HasUAC() {
|
||||
log.Warn().Msg("未检测到管理员权限,尝试提权运行")
|
||||
p.runSelfAsAdmin()
|
||||
return
|
||||
}
|
||||
log.Info().Msg("管理员权限已确认")
|
||||
|
||||
log.Info().Msg("开始连接虚拟热点")
|
||||
proc = connectToVirtualHotspot()
|
||||
|
||||
defer cleanup()
|
||||
|
||||
log.Info().Msg("启动系统托盘")
|
||||
systray.Run(onReady, onExit)
|
||||
}
|
||||
|
||||
// onReady 系统托盘就绪回调:设置图标、工具提示、构建右键菜单、注册各菜单项的点击事件。
|
||||
func onReady() {
|
||||
log.Info().Msg("系统托盘就绪")
|
||||
|
||||
icon := loadIcon()
|
||||
systray.SetIcon(icon)
|
||||
|
||||
systray.SetTooltip("若一切正常,您现可连接到SCU的所有队内服务")
|
||||
|
||||
mTitle := systray.AddMenuItem("<<*>> SCU Remote Connect Client", "已连接")
|
||||
mTitle.Disable()
|
||||
systray.AddSeparator()
|
||||
|
||||
mQuit := systray.AddMenuItem("退出", "退出程序,关闭现有连接")
|
||||
mVisitGitea := systray.AddMenuItem("访问代码托管服务 Gitea", "SASWE 代码托管服务")
|
||||
mVisitCloudreve := systray.AddMenuItem("访问文件分发服务 Cloudreve", "SASWE 小文件分发服务")
|
||||
systray.AddSeparator()
|
||||
mShowConsoleWindow := systray.AddMenuItem("显示控制台窗口", "调试用")
|
||||
mHideConsoleWindow := systray.AddMenuItem("隐藏控制台窗口", "调试用")
|
||||
|
||||
// 退出按钮 → 调用 systray.Quit() 触发 onExit
|
||||
go func() {
|
||||
<-mQuit.ClickedCh
|
||||
log.Info().Msg("用户点击退出")
|
||||
systray.Quit()
|
||||
}()
|
||||
|
||||
// 访问 Gitea → 浏览器打开 SASWE 代码托管
|
||||
go func() {
|
||||
<-mVisitGitea.ClickedCh
|
||||
log.Info().Msg("用户点击访问 Gitea")
|
||||
exec.Command("cmd", "/c", "start", "http://103.217.186.98:3000/").Start()
|
||||
}()
|
||||
|
||||
// 访问 Cloudreve → 浏览器打开 SASWE 文件分发
|
||||
go func() {
|
||||
<-mVisitCloudreve.ClickedCh
|
||||
log.Info().Msg("用户点击访问 Cloudreve")
|
||||
exec.Command("cmd", "/c", "start", "http://103.217.186.98:5212/").Start()
|
||||
}()
|
||||
|
||||
// 显示控制台 → 调用 showConsoleWindow()
|
||||
go func() {
|
||||
<-mShowConsoleWindow.ClickedCh
|
||||
log.Info().Msg("用户点击显示控制台窗口")
|
||||
showConsoleWindow()
|
||||
}()
|
||||
|
||||
// 隐藏控制台 → 调用 hideConsoleWindow()
|
||||
go func() {
|
||||
<-mHideConsoleWindow.ClickedCh
|
||||
log.Info().Msg("用户点击隐藏控制台窗口")
|
||||
hideConsoleWindow()
|
||||
}()
|
||||
}
|
||||
|
||||
// onExit 系统托盘退出回调:清理子进程并记录退出日志。
|
||||
func onExit() {
|
||||
cleanup()
|
||||
log.Info().Msg("程序退出")
|
||||
}
|
||||
|
||||
// cleanup 终止 EasyTier 子进程,防止残留进程占用端口。
|
||||
func cleanup() {
|
||||
if proc != nil {
|
||||
log.Info().Int("pid", proc.Pid).Msg("终止 EasyTier 进程")
|
||||
if err := proc.Kill(); err != nil {
|
||||
log.Warn().Err(err).Msg("终止 EasyTier 进程失败")
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user