| | |
| | | import com.zy.core.network.fake.ZyCrnFakeConnect; |
| | | import com.zy.core.network.real.ZyCrnRealConnect; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import java.util.concurrent.Executors; |
| | | import java.util.concurrent.ScheduledExecutorService; |
| | | import java.util.concurrent.ThreadFactory; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | /** |
| | | * 连接驱动 |
| | |
| | | private DeviceConfig deviceConfig; |
| | | private ZyCrnConnectApi zyCrnConnectApi; |
| | | private volatile boolean closed = false; |
| | | private Thread selfThread; |
| | | private ScheduledExecutorService executor; |
| | | |
| | | public ZyCrnConnectDriver(DeviceConfig deviceConfig) { |
| | | this.deviceConfig = deviceConfig; |
| | | } |
| | | |
| | | @Override |
| | | @SuppressWarnings("InfiniteLoopStatement") |
| | | public void run() { |
| | | 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(); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | @Override |
| | |
| | | @Override |
| | | public void close() { |
| | | closed = true; |
| | | Thread t = selfThread; |
| | | if (t != null) { |
| | | try { t.interrupt(); } catch (Exception ignore) {} |
| | | ScheduledExecutorService ex = executor; |
| | | if (ex != null) { |
| | | try { ex.shutdownNow(); } catch (Exception ignore) {} |
| | | } |
| | | if (zyCrnConnectApi != null) { |
| | | zyCrnConnectApi.disconnect(); |
| | |
| | | } |
| | | |
| | | public void start() { |
| | | Thread t = new Thread(this); |
| | | t.start(); |
| | | executor = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() { |
| | | @Override |
| | | public Thread newThread(Runnable r) { |
| | | Thread t = new Thread(r); |
| | | t.setName("CrnConnect-" + deviceConfig.getDeviceNo()); |
| | | t.setDaemon(true); |
| | | return t; |
| | | } |
| | | }); |
| | | executor.scheduleAtFixedRate(() -> { |
| | | if (closed || Thread.currentThread().isInterrupted()) { |
| | | return; |
| | | } |
| | | try { |
| | | if (!connected) { |
| | | connect(); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | }, 0, 1000, TimeUnit.MILLISECONDS); |
| | | } |
| | | |
| | | public ZyCrnStatusEntity getStatus() { |