Files
live/edge-agent/tray_windows.go
T
admin 409e5d314e Go边缘代理: 单文件可执行+嵌入式MediaMTX+监控+注册
- edge-agent/: Go项目, 支持Windows托盘/Linux无头两种模式
- 使用go:embed将MediaMTX二进制嵌入单一可执行文件
- 首次运行自动释放MediaMTX并生成边缘节点配置
- 自动注册到origin (POST /api/nodes/register)
- 10秒心跳上报CPU/RAM/带宽/连接数 (gopsutil采集)
- Windows: getlantern/systray托盘菜单(状态/CPU/MEM/带宽/退出)
- Linux: headless模式,适合systemd守护
- build.sh/build.ps1: 交叉编译脚本(Linux/Windows)
- 更新start.sh/品牌名StreamCore
2026-08-10 14:54:03 +08:00

65 lines
1.2 KiB
Go

//go:build windows
package main
import (
"fmt"
"log"
"time"
"streamcore-edge/agent"
"github.com/getlantern/systray"
)
func runTray(ag *agent.Agent) {
systray.Run(
func() { onReady(ag) },
func() { onExit(ag) },
)
}
func onReady(ag *agent.Agent) {
systray.SetIcon(iconData)
systray.SetTitle("StreamCore Edge")
systray.SetTooltip("StreamCore Edge Node")
mStatus := systray.AddMenuItem("Node: "+ag.NodeID(), "Node")
mStatus.Disable()
systray.AddSeparator()
mCPU := systray.AddMenuItem("CPU: --", "CPU")
mCPU.Disable()
mMem := systray.AddMenuItem("MEM: --", "Memory")
mMem.Disable()
mBW := systray.AddMenuItem("Bandwidth: --", "Bandwidth")
mBW.Disable()
systray.AddSeparator()
mQuit := systray.AddMenuItem("Quit", "Shutdown")
go func() {
ticker := time.NewTicker(3 * time.Second)
defer ticker.Stop()
for {
select {
case <-ticker.C:
m := ag.Metrics()
mCPU.SetTitle(fmt.Sprintf("CPU: %.1f%%", m.CPU))
mMem.SetTitle(fmt.Sprintf("MEM: %.1f%%", m.Memory))
mBW.SetTitle(fmt.Sprintf("Bandwidth: %.1f Mbps", m.Bandwidth))
case <-mQuit.ClickedCh:
systray.Quit()
return
}
}
}()
}
func onExit(ag *agent.Agent) {
log.Println("Tray exit requested")
ag.Stop()
}