vf107/src/worker/netWorker.js
@@ -31,6 +31,8 @@
// 网络状态跟踪变量
let lastConnected = false  // 上次连接状态
let shouldReconnect = false
let lastReconnectTime = 0  // 上次重连时间
const RECONNECT_INTERVAL = 15000  // 重连间隔(毫秒)
const net_map = map.get("NET")
/**
 * 根据配置建立网络连接
@@ -42,6 +44,12 @@
 */
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启用标志
@@ -119,7 +127,10 @@
        logger.info("NET connect res:", res);
        if (res < 0) {
            //小于0并不是表示网络连接失败,而是一个特殊的错误,可以重试一次就可以
            shouldReconnect = true
            const currentTime = Date.now()
            if (currentTime - lastReconnectTime >= RECONNECT_INTERVAL) {
                shouldReconnect = true
            }
        }
        return res;
    } catch (error) {
@@ -187,28 +198,43 @@
            if (net.getNative()) {
                net.loop(); // 执行网络循环处理
            }
            // 先检查网络连接状态
            if (net.isConnected()) {
                let param = driver.net.getNetParam()
                if (!lastConnected || lastConnectedIp != param.ip) {
                    bus.fire(driver.net.CONNECTED_CHANGED, "connected")
                    lastConnected = true
                    net_map.put("NET_STATUS", "connected")
                    lastConnectedIp = param.ip
                }
            } else {
                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) {
                logger.info("NET shouldReconnect");
                shouldReconnect = false
                connect()
                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)
        }
        if (net.isConnected()) {
            let param = driver.net.getNetParam()
            if (!lastConnected || lastConnectedIp != param.ip) {
                bus.fire(driver.net.CONNECTED_CHANGED, "connected")
                lastConnected = true
                net_map.put("NET_STATUS", "connected")
                lastConnectedIp = param.ip
            }
        } else {
            if (lastConnected) {
                bus.fire(driver.net.CONNECTED_CHANGED, "disconnected")
                lastConnected = false
                net_map.put("NET_STATUS", "disconnected")
            }
        }
    }, 5000)
}