package com.zy.core.network;
|
|
import com.zy.asrs.entity.DeviceConfig;
|
import com.zy.common.utils.RedisUtil;
|
import com.zy.core.ThreadHandler;
|
import com.zy.core.model.CommandResponse;
|
import com.zy.core.model.command.StationCommand;
|
import com.zy.core.network.api.ZyStationConnectApi;
|
import com.zy.core.network.entity.ZyStationStatusEntity;
|
import java.util.List;
|
import com.zy.core.network.fake.ZyStationFakeConnect;
|
import com.zy.core.network.real.ZyStationRealConnect;
|
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 ZyStationConnectDriver implements ThreadHandler {
|
|
private boolean connected = false;
|
private DeviceConfig deviceConfig;
|
private RedisUtil redisUtil;
|
private ZyStationConnectApi zyStationConnectApi;
|
private volatile boolean closed = false;
|
private ScheduledExecutorService executor;
|
|
public ZyStationConnectDriver(DeviceConfig deviceConfig, RedisUtil redisUtil) {
|
this.deviceConfig = deviceConfig;
|
this.redisUtil = redisUtil;
|
}
|
|
@Override
|
public void run() {
|
|
}
|
|
@Override
|
public boolean connect() {
|
if (deviceConfig.getFake() == 0) {
|
zyStationConnectApi = new ZyStationRealConnect(deviceConfig, redisUtil);
|
} else {
|
zyStationConnectApi = new ZyStationFakeConnect(deviceConfig, redisUtil);
|
}
|
|
boolean connect = zyStationConnectApi.connect();
|
connected = connect;
|
return connect;
|
}
|
|
@Override
|
public void close() {
|
closed = true;
|
ScheduledExecutorService ex = executor;
|
if (ex != null) {
|
try { ex.shutdownNow(); } catch (Exception ignore) {}
|
}
|
if (zyStationConnectApi != null) {
|
zyStationConnectApi.disconnect();
|
zyStationConnectApi = null;
|
}
|
connected = false;
|
}
|
|
public void start() {
|
executor = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() {
|
@Override
|
public Thread newThread(Runnable r) {
|
Thread t = new Thread(r);
|
t.setName("DevpConnect-" + 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 List<ZyStationStatusEntity> getStatus() {
|
if (zyStationConnectApi == null) {
|
return null;
|
}
|
return zyStationConnectApi.getStatus();
|
}
|
|
public CommandResponse sendCommand(StationCommand command) {
|
return zyStationConnectApi.sendCommand(command);
|
}
|
}
|