| | |
| | | import com.zy.core.network.fake.ZyRgvFakeConnect; |
| | | import com.zy.core.network.real.ZyRgvRealConnect; |
| | | 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; |
| | | |
| | | @Slf4j |
| | | public class ZyRgvConnectDriver implements ThreadHandler { |
| | | private boolean connected = false; |
| | | private DeviceConfig deviceConfig; |
| | | private ZyRgvConnectApi zyRgvConnectApi; |
| | | private volatile boolean closed = false; |
| | | private ScheduledExecutorService executor; |
| | | |
| | | public ZyRgvConnectDriver(DeviceConfig deviceConfig) { |
| | | this.deviceConfig = deviceConfig; |
| | | } |
| | | |
| | | @Override |
| | | @SuppressWarnings("InfiniteLoopStatement") |
| | | public void run() { |
| | | while (!Thread.currentThread().isInterrupted()) { |
| | | try { |
| | | if (!connected) { |
| | | connect(); |
| | | } |
| | | Thread.sleep(1000); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | @Override |
| | |
| | | |
| | | @Override |
| | | public void close() { |
| | | zyRgvConnectApi.disconnect(); |
| | | zyRgvConnectApi = null; |
| | | closed = true; |
| | | ScheduledExecutorService ex = executor; |
| | | if (ex != null) { |
| | | try { ex.shutdownNow(); } catch (Exception ignore) {} |
| | | } |
| | | if (zyRgvConnectApi != null) { |
| | | zyRgvConnectApi.disconnect(); |
| | | zyRgvConnectApi = null; |
| | | } |
| | | connected = false; |
| | | } |
| | | |
| | | public void start() { |
| | | executor = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() { |
| | | @Override |
| | | public Thread newThread(Runnable r) { |
| | | Thread t = new Thread(r); |
| | | t.setName("RgvConnect-" + 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 ZyRgvStatusEntity getStatus() { |
| | |
| | | public CommandResponse sendCommand(RgvCommand command) { |
| | | return zyRgvConnectApi.sendCommand(command); |
| | | } |
| | | } |
| | | } |