#
Junjie
2025-12-17 96f987b030f4c961a985f07079ba12abd865fdb2
src/main/java/com/zy/core/network/ZyRgvConnectDriver.java
@@ -1,6 +1,5 @@
package com.zy.core.network;
import HslCommunication.Profinet.Siemens.SiemensS7Net;
import com.zy.asrs.entity.DeviceConfig;
import com.zy.core.ThreadHandler;
import com.zy.core.model.CommandResponse;
@@ -14,24 +13,28 @@
@Slf4j
public class ZyRgvConnectDriver implements ThreadHandler {
    private boolean connected = false;
    private SiemensS7Net siemensNet;
    private DeviceConfig deviceConfig;
    private ZyRgvConnectApi zyRgvConnectApi;
    private volatile boolean closed = false;
    private Thread selfThread;
    public ZyRgvConnectDriver(SiemensS7Net siemensS7Net, DeviceConfig deviceConfig) {
        this.siemensNet = siemensS7Net;
    public ZyRgvConnectDriver(DeviceConfig deviceConfig) {
        this.deviceConfig = deviceConfig;
    }
    @Override
    @SuppressWarnings("InfiniteLoopStatement")
    public void run() {
        while (true) {
        selfThread = Thread.currentThread();
        while (!closed && !Thread.currentThread().isInterrupted()) {
            try {
                if (!connected) {
                    connect();
                }
                Thread.sleep(1000);
            } catch (InterruptedException ie) {
                Thread.currentThread().interrupt();
                break;
            } catch (Exception e) {
                e.printStackTrace();
            }
@@ -41,7 +44,7 @@
    @Override
    public boolean connect() {
        if (deviceConfig.getFake() == 0) {
            zyRgvConnectApi = new ZyRgvRealConnect(siemensNet, deviceConfig);
            zyRgvConnectApi = new ZyRgvRealConnect(deviceConfig);
        } else {
            zyRgvConnectApi = new ZyRgvFakeConnect(deviceConfig);
        }
@@ -52,16 +55,31 @@
    @Override
    public void close() {
        zyRgvConnectApi.disconnect();
        zyRgvConnectApi = null;
        closed = true;
        Thread t = selfThread;
        if (t != null) {
            try { t.interrupt(); } catch (Exception ignore) {}
        }
        if (zyRgvConnectApi != null) {
            zyRgvConnectApi.disconnect();
            zyRgvConnectApi = null;
        }
        connected = false;
    }
    public void start() {
        Thread t = new Thread(this);
        t.start();
    }
    public ZyRgvStatusEntity getStatus() {
        if (zyRgvConnectApi == null) {
            return null;
        }
        return zyRgvConnectApi.getStatus();
    }
    public CommandResponse sendCommand(RgvCommand command) {
        return zyRgvConnectApi.sendCommand(command);
    }
}
}