package com.zy.core.network;
|
|
import com.zy.asrs.entity.DeviceConfig;
|
import com.zy.core.ThreadHandler;
|
import com.zy.core.model.CommandResponse;
|
import com.zy.core.model.command.RgvCommand;
|
import com.zy.core.network.api.ZyRgvConnectApi;
|
import com.zy.core.network.entity.ZyRgvStatusEntity;
|
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
|
public void run() {
|
|
}
|
|
@Override
|
public boolean connect() {
|
if (deviceConfig.getFake() == 0) {
|
zyRgvConnectApi = new ZyRgvRealConnect(deviceConfig);
|
} else {
|
zyRgvConnectApi = new ZyRgvFakeConnect(deviceConfig);
|
}
|
boolean connect = zyRgvConnectApi.connect();
|
connected = connect;
|
return connect;
|
}
|
|
@Override
|
public void close() {
|
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() {
|
if (zyRgvConnectApi == null) {
|
return null;
|
}
|
return zyRgvConnectApi.getStatus();
|
}
|
|
public CommandResponse sendCommand(RgvCommand command) {
|
return zyRgvConnectApi.sendCommand(command);
|
}
|
}
|