|
@@ -48,13 +48,13 @@ func serviceRun() {
|
|
|
// 1, 首次连接网络
|
|
// 1, 首次连接网络
|
|
|
openNetwork()
|
|
openNetwork()
|
|
|
|
|
|
|
|
- // 2, 监听有线插拔
|
|
|
|
|
|
|
+ // 2, 监控拔插网线
|
|
|
eth0PlugCycleCh := make(chan bool, 1)
|
|
eth0PlugCycleCh := make(chan bool, 1)
|
|
|
done := make(chan struct{})
|
|
done := make(chan struct{})
|
|
|
defer close(done)
|
|
defer close(done)
|
|
|
go monitorEth0PlugCycle(eth0PlugCycleCh, done)
|
|
go monitorEth0PlugCycle(eth0PlugCycleCh, done)
|
|
|
|
|
|
|
|
- // 3, 循环监控网络
|
|
|
|
|
|
|
+ // 3, 监控联网状态
|
|
|
t := time.NewTimer(interval1)
|
|
t := time.NewTimer(interval1)
|
|
|
defer t.Stop()
|
|
defer t.Stop()
|
|
|
for {
|
|
for {
|
|
@@ -64,7 +64,7 @@ func serviceRun() {
|
|
|
dnsOK, pingOK, tcpOK, httpOK := CheckNetwork()
|
|
dnsOK, pingOK, tcpOK, httpOK := CheckNetwork()
|
|
|
baseapp.Logger.Infof("[%s] 联网检测: DNS OK=%v, PING OK=%v, TCP OK=%v, HTTP OK=%v", MODULE_NAME, dnsOK, pingOK, tcpOK, httpOK)
|
|
baseapp.Logger.Infof("[%s] 联网检测: DNS OK=%v, PING OK=%v, TCP OK=%v, HTTP OK=%v", MODULE_NAME, dnsOK, pingOK, tcpOK, httpOK)
|
|
|
|
|
|
|
|
- // 3.2, 检测成功-在线时
|
|
|
|
|
|
|
+ // 3.2, 联网成功-在线时
|
|
|
if dnsOK && pingOK && tcpOK {
|
|
if dnsOK && pingOK && tcpOK {
|
|
|
isOnline.Store(true)
|
|
isOnline.Store(true)
|
|
|
offlineStartTs.Store(0)
|
|
offlineStartTs.Store(0)
|
|
@@ -87,7 +87,7 @@ func serviceRun() {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 3.3, 检测失败-离线时
|
|
|
|
|
|
|
+ // 3.3, 联网失败-离线时
|
|
|
if isOnline.Load() { // 状态由"1"变为"0"
|
|
if isOnline.Load() { // 状态由"1"变为"0"
|
|
|
isOnline.Store(false)
|
|
isOnline.Store(false)
|
|
|
offlineStartTs.Store(time.Now().UnixNano()) // 记录离线开始时间
|
|
offlineStartTs.Store(time.Now().UnixNano()) // 记录离线开始时间
|
|
@@ -100,7 +100,7 @@ func serviceRun() {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
t.Reset(interval1)
|
|
t.Reset(interval1)
|
|
|
- case <-eth0PlugCycleCh: // 有线网口插拔事件, 重新连接网络, 优先有线网
|
|
|
|
|
|
|
+ case <-eth0PlugCycleCh: // 当监听到拔插网线时, 触发重新(切换)连接网络
|
|
|
openNetwork()
|
|
openNetwork()
|
|
|
continue
|
|
continue
|
|
|
case <-baseapp.IsExit2():
|
|
case <-baseapp.IsExit2():
|
|
@@ -242,7 +242,7 @@ func openNetwork() {
|
|
|
|
|
|
|
|
if tryOpenLTE() {
|
|
if tryOpenLTE() {
|
|
|
curNetType = NetLTE
|
|
curNetType = NetLTE
|
|
|
- enableEth0() // 保持 eth0 可用, 以便监听网线的插拔, 触发切换网络
|
|
|
|
|
|
|
+ enableEth0() // 重新启用"eth0", 否则无法监听拔插网线
|
|
|
baseapp.Logger.Infof("[%s] ✅ 蜂窝网络已连接", MODULE_NAME)
|
|
baseapp.Logger.Infof("[%s] ✅ 蜂窝网络已连接", MODULE_NAME)
|
|
|
return
|
|
return
|
|
|
}
|
|
}
|
|
@@ -251,7 +251,7 @@ func openNetwork() {
|
|
|
baseapp.Logger.Warnf("[%s] 没有可用的网络连接!", MODULE_NAME)
|
|
baseapp.Logger.Warnf("[%s] 没有可用的网络连接!", MODULE_NAME)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-// 监控有线插拔
|
|
|
|
|
|
|
+// 监控拔插网线
|
|
|
func monitorEth0PlugCycle(plugCycle chan bool, done chan struct{}) error {
|
|
func monitorEth0PlugCycle(plugCycle chan bool, done chan struct{}) error {
|
|
|
updates := make(chan netlink.LinkUpdate)
|
|
updates := make(chan netlink.LinkUpdate)
|
|
|
if err := netlink.LinkSubscribe(updates, done); err != nil {
|
|
if err := netlink.LinkSubscribe(updates, done); err != nil {
|