|
|
@@ -80,8 +80,9 @@ func main() {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- var pingState atomic.Bool
|
|
|
- heartbeatLoop(&pingState) // -启动-设备在线-心跳检测-
|
|
|
+ var pingState, pingErrorPrint atomic.Bool
|
|
|
+ pingErrorPrint.Store(true)
|
|
|
+ heartbeatLoop(&pingState, &pingErrorPrint) /// ping
|
|
|
for {
|
|
|
if pingState.Load() { //// 等待成功连接上目标设备卍
|
|
|
break
|
|
|
@@ -89,6 +90,7 @@ func main() {
|
|
|
fmt.Printf("[%s] 正在尝试连接设备...\n", MODULE_NAME)
|
|
|
time.Sleep(1 * time.Second)
|
|
|
}
|
|
|
+ pingErrorPrint.Store(false)
|
|
|
|
|
|
term(&pingState) /////////////////// 启动终端模拟器卍
|
|
|
}
|
|
|
@@ -182,6 +184,7 @@ func term(pingState *atomic.Bool) {
|
|
|
|
|
|
if input == "exit" || input == "quit" {
|
|
|
_, _ = coupler.quit()
|
|
|
+ fmt.Println("bye")
|
|
|
break
|
|
|
}
|
|
|
|
|
|
@@ -246,7 +249,7 @@ func interruptLoop(pingState, executing, interrupted *atomic.Bool) {
|
|
|
}()
|
|
|
}
|
|
|
|
|
|
-func heartbeatLoop(pingState *atomic.Bool) {
|
|
|
+func heartbeatLoop(pingState, pingErrorPrint *atomic.Bool) {
|
|
|
go func() {
|
|
|
ticker := time.NewTicker(1 * time.Second)
|
|
|
defer ticker.Stop()
|
|
|
@@ -259,6 +262,17 @@ func heartbeatLoop(pingState *atomic.Bool) {
|
|
|
pingState.Store(true)
|
|
|
pingFailCount = 0
|
|
|
} else {
|
|
|
+ if pingErrorPrint.Load() { /// 打印的错误信息, 提升交互使用体验
|
|
|
+ errMsg := ""
|
|
|
+ if err != nil {
|
|
|
+ errMsg = err.Error()
|
|
|
+ } else if resp.Error != nil {
|
|
|
+ errMsg = resp.Error.Message
|
|
|
+ } else {
|
|
|
+ errMsg = string(resp.Result)
|
|
|
+ }
|
|
|
+ fmt.Printf("[%s] 错误: 设备未响应(%s)!!\n", MODULE_NAME, errMsg)
|
|
|
+ }
|
|
|
pingFailCount++
|
|
|
if pingFailCount >= 3 { ///// 连续3次ping失败, 可以认为设备离线
|
|
|
pingState.Store(false)
|
|
|
@@ -270,25 +284,24 @@ func heartbeatLoop(pingState *atomic.Bool) {
|
|
|
|
|
|
func printWelcome(pingState *atomic.Bool) {
|
|
|
welcome := `
|
|
|
- _ _ _ _ _ _ _ _
|
|
|
-| \ | (_) | | | (_) | |
|
|
|
-| \| |_| |_ ___| |__ _| | | ___
|
|
|
-| . | | __/ __| '_ \| | | |/ _ \
|
|
|
-| |\ | | || (__| | | | | | | __/
|
|
|
-|_| \_|_|\__\___|_| |_|_|_|_|\___|
|
|
|
-
|
|
|
-══════════════════════════════════
|
|
|
- 云飞科技RTU远程运维终端
|
|
|
-提示: 输入'quit'命令, 退出终端
|
|
|
-══════════════════════════════════
|
|
|
+ ____ _ _ _____ _ _ _ _ _
|
|
|
+| _ \ | | | | / ____| | | | | || \ | |
|
|
|
+| |_) || |_| | ___ | | | | ___| | | || \| |
|
|
|
+| _ < | _ |/ _ \| | | |/ _ \ | | || . _ |
|
|
|
+| |_) || | | | __/| |____| | __/ |_| || |\ |
|
|
|
+|____/ |_| |_|\___| \_____|_|\___|\___/ |_| \_|
|
|
|
+================================================
|
|
|
+ 欢迎使用云飞科技RTU设备远程运维终端
|
|
|
+提示: 输入"quit"命令或按下"Ctrl+D"键, 可退出终端
|
|
|
+================================================
|
|
|
`
|
|
|
fmt.Println(welcome)
|
|
|
fmt.Printf("客户端ID: %s\n", coupler.machineID)
|
|
|
state := ""
|
|
|
if pingState.Load() {
|
|
|
- state = "已连接 ✅"
|
|
|
+ state = "√ 已连接"
|
|
|
} else {
|
|
|
- state = "未连接 ❌"
|
|
|
+ state = "x 未连接"
|
|
|
}
|
|
|
fmt.Printf("设备状态: %s\n\n", state)
|
|
|
}
|