| | |
| | | // 网络状态跟踪变量 |
| | | let lastConnected = false // 上次连接状态 |
| | | let shouldReconnect = false |
| | | let lastReconnectTime = 0 // 上次重连时间 |
| | | const RECONNECT_INTERVAL = 15000 // 重连间隔(毫秒) |
| | | const net_map = map.get("NET") |
| | | /** |
| | | * 根据配置建立网络连接 |
| | |
| | | */ |
| | | function connect() { |
| | | try { |
| | | // 如果网络已经连接,不需要重连 |
| | | if (net.isConnected()) { |
| | | logger.info("NET already connected, skip connect") |
| | | return 0 |
| | | } |
| | | |
| | | let res = 0; |
| | | // 获取网络配置 |
| | | let dhcp = config.get("net.dhcp") == 2 // DHCP启用标志 |
| | |
| | | logger.info("NET connect res:", res); |
| | | if (res < 0) { |
| | | //小于0并不是表示网络连接失败,而是一个特殊的错误,可以重试一次就可以 |
| | | const currentTime = Date.now() |
| | | if (currentTime - lastReconnectTime >= RECONNECT_INTERVAL) { |
| | | shouldReconnect = true |
| | | } |
| | | } |
| | | return res; |
| | | } catch (error) { |
| | |
| | | if (net.getNative()) { |
| | | net.loop(); // 执行网络循环处理 |
| | | } |
| | | if (shouldReconnect) { |
| | | logger.info("NET shouldReconnect"); |
| | | shouldReconnect = false |
| | | connect() |
| | | } |
| | | } catch (error) { |
| | | logger.error(error) |
| | | } |
| | | |
| | | // 先检查网络连接状态 |
| | | if (net.isConnected()) { |
| | | let param = driver.net.getNetParam() |
| | | if (!lastConnected || lastConnectedIp != param.ip) { |
| | |
| | | lastConnectedIp = param.ip |
| | | } |
| | | } else { |
| | | if (lastConnected) { |
| | | logger.info("NET not isConnected"); |
| | | // if (lastConnected) { |
| | | bus.fire(driver.net.CONNECTED_CHANGED, "disconnected") |
| | | lastConnected = false |
| | | net_map.put("NET_STATUS", "disconnected") |
| | | // 自动触发重连 |
| | | shouldReconnect = true |
| | | // } |
| | | } |
| | | |
| | | // 然后检查是否需要重连 |
| | | if (shouldReconnect) { |
| | | const currentTime = Date.now() |
| | | if (currentTime - lastReconnectTime >= RECONNECT_INTERVAL) { |
| | | logger.info("NET shouldReconnect"); |
| | | shouldReconnect = false |
| | | lastReconnectTime = currentTime |
| | | connect() |
| | | } else { |
| | | // 重连间隔不足,取消重连 |
| | | shouldReconnect = false |
| | | // logger.info("NET reconnect skipped, interval not reached") |
| | | } |
| | | } |
| | | } catch (error) { |
| | | logger.error(error) |
| | | } |
| | | }, 5000) |
| | | } |