|
@@ -31,10 +31,7 @@ import static com.ruoyi.sim.constant.CommConst.*;
|
|
|
public class CommSendService {
|
|
|
|
|
|
private static final Logger l = LoggerFactory.getLogger(CommSendService.class);
|
|
|
- /**
|
|
|
- * 缓存的Socket连接。
|
|
|
- */
|
|
|
- private Socket cachedSocket = null;
|
|
|
+
|
|
|
@Autowired
|
|
|
private CommReceiveService simReceiveService;
|
|
|
@Autowired
|
|
@@ -48,11 +45,15 @@ public class CommSendService {
|
|
|
@Autowired
|
|
|
private RealExamCollectionService realExamCollectionService;
|
|
|
@Autowired
|
|
|
- private SimConfig config;
|
|
|
- @Autowired
|
|
|
private CommBuildService commBuildService;
|
|
|
@Autowired
|
|
|
private DebugFaultService debugFaultService;
|
|
|
+ @Autowired
|
|
|
+ private SocketOldService socketOldService;
|
|
|
+ @Autowired
|
|
|
+ CommReceiveService commReceiveService;
|
|
|
+ @Autowired
|
|
|
+ private SimConfig config;
|
|
|
|
|
|
/**
|
|
|
* 定时任务。
|
|
@@ -120,7 +121,7 @@ public class CommSendService {
|
|
|
//
|
|
|
// 打开socket
|
|
|
{
|
|
|
- AjaxResult ar1 = openSocket();
|
|
|
+ AjaxResult ar1 = socketOldService.openSocket();
|
|
|
if (ar1.isError()) {
|
|
|
return ar1;
|
|
|
}
|
|
@@ -196,12 +197,14 @@ public class CommSendService {
|
|
|
// debugReadSimType(simNum);
|
|
|
// l.info("bRea:" + bRea);
|
|
|
|
|
|
- l.info("cachedSocket.isConnected():" + cachedSocket.isConnected());
|
|
|
- l.info("cachedSocket.isBound():" + cachedSocket.isBound());
|
|
|
- l.info("cachedSocket.isClosed():" + cachedSocket.isClosed());
|
|
|
- l.info("cachedSocket.isInputShutdown():" + cachedSocket.isInputShutdown());
|
|
|
- l.info("cachedSocket.isOutputShutdown():" + cachedSocket.isOutputShutdown());
|
|
|
-
|
|
|
+ {
|
|
|
+ Socket s = socketOldService.getCachedSocket();
|
|
|
+ l.info("cachedSocket.isConnected():" + s.isConnected());
|
|
|
+ l.info("cachedSocket.isBound():" + s.isBound());
|
|
|
+ l.info("cachedSocket.isClosed():" + s.isClosed());
|
|
|
+ l.info("cachedSocket.isInputShutdown():" + s.isInputShutdown());
|
|
|
+ l.info("cachedSocket.isOutputShutdown():" + s.isOutputShutdown());
|
|
|
+ }
|
|
|
|
|
|
// debugReadAllFaultResistance(simNum, simType);
|
|
|
|
|
@@ -243,8 +246,8 @@ public class CommSendService {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- openSocket();
|
|
|
- if (isCachedSocketOk()) {
|
|
|
+ socketOldService.openSocket();
|
|
|
+ if (socketOldService.isCachedSocketOk()) {
|
|
|
checkAllSimState();
|
|
|
}
|
|
|
}
|
|
@@ -302,7 +305,7 @@ public class CommSendService {
|
|
|
SimMsg smR = send(smS, s, retryCount, sleep);
|
|
|
if (StringUtils.isNotBlank(smR.getReceiveMsg())) {
|
|
|
l.info("isNotBlank");
|
|
|
- commFailCountClearOne(s.getSimId());
|
|
|
+ socketOldService.commFailCountClearOne(s.getSimId());
|
|
|
}
|
|
|
simReceiveService.checkOneSimState(smR, s);
|
|
|
{
|
|
@@ -553,7 +556,7 @@ public class CommSendService {
|
|
|
// check sim
|
|
|
// 打开socket
|
|
|
{
|
|
|
- AjaxResult ar1 = openSocket();
|
|
|
+ AjaxResult ar1 = socketOldService.openSocket();
|
|
|
l.info("ar1 = {}", ar1);
|
|
|
if (ar1.isError()) {
|
|
|
return ar1;
|
|
@@ -818,7 +821,7 @@ public class CommSendService {
|
|
|
l.info("####SendMsg#### == [{}]", sm);
|
|
|
}
|
|
|
// 如果没有打开socket,顺道打开。正好后面要sleep
|
|
|
- openSocket();
|
|
|
+ socketOldService.openSocket();
|
|
|
{
|
|
|
// sleep ,追求顺序请求。
|
|
|
if (sleep > 0 && previousSendSleep != 0L) {
|
|
@@ -826,8 +829,8 @@ public class CommSendService {
|
|
|
}
|
|
|
}
|
|
|
previousSendSleep = sleep;
|
|
|
- InputStream is = cachedSocket.getInputStream();
|
|
|
- OutputStream os = cachedSocket.getOutputStream();
|
|
|
+ InputStream is = socketOldService.getCachedSocket().getInputStream();
|
|
|
+ OutputStream os = socketOldService.getCachedSocket().getOutputStream();
|
|
|
os.write(hexStrToByteArrs(sm.getSendMsg()));
|
|
|
sm.setSendTime(DateUtils.getNowDate());
|
|
|
if (s != null) {
|
|
@@ -845,10 +848,13 @@ public class CommSendService {
|
|
|
{
|
|
|
l.info("####ReceiveMsg#### = [{}]", sm);
|
|
|
}
|
|
|
- if (!commBuildService.checkReceiveMsg(sm.getReceiveMsg())) {
|
|
|
- // todo:
|
|
|
- l.warn("####Fail#### = {}", sm);
|
|
|
- return sm;
|
|
|
+ {
|
|
|
+ AjaxResult ar = commReceiveService.checkReceiveMsg(sm.getReceiveMsg());
|
|
|
+ if (ar.isError()) {
|
|
|
+ // todo:
|
|
|
+ l.warn("####Fail#### = {}", sm);
|
|
|
+ return sm;
|
|
|
+ }
|
|
|
}
|
|
|
if (s != null) {
|
|
|
simService.updateLastReceivedTime(s);
|
|
@@ -857,10 +863,10 @@ public class CommSendService {
|
|
|
e.printStackTrace();
|
|
|
// 失败计数
|
|
|
l.info("fail sim data = {}", s);
|
|
|
- boolean limit = commFailCountAdd1(Objects.requireNonNull(s).getSimId());
|
|
|
+ boolean limit = socketOldService.commFailCountAdd1(Objects.requireNonNull(s).getSimId());
|
|
|
if (limit) {
|
|
|
simService.updateSimStateBySimId(s.getSimId(), Sim.State.OFFLINE);
|
|
|
- commFailCountClearOne(s.getSimId());
|
|
|
+ socketOldService.commFailCountClearOne(s.getSimId());
|
|
|
}
|
|
|
// 先考虑一台模拟器演示。
|
|
|
// 进行重试 start
|
|
@@ -893,75 +899,6 @@ public class CommSendService {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * cachedSocket is ok
|
|
|
- *
|
|
|
- * @return
|
|
|
- */
|
|
|
- public boolean isCachedSocketOk() {
|
|
|
- return (cachedSocket != null &&
|
|
|
- cachedSocket.isConnected() &&
|
|
|
- cachedSocket.isBound() &&
|
|
|
- !cachedSocket.isClosed());
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * openSocket
|
|
|
- *
|
|
|
- * @return
|
|
|
- */
|
|
|
- public AjaxResult openSocket() {
|
|
|
- // check
|
|
|
- if (!config.isCommGlobal()) {
|
|
|
- l.warn("isCommGlobal == false [模拟器通信被禁用!]");
|
|
|
- return AjaxResult.error("模拟器通信被禁用!");
|
|
|
- }
|
|
|
- try {
|
|
|
- if (!isCachedSocketOk()) {
|
|
|
- l.info("openSocket cachedSocket is not ok!new socket!");
|
|
|
- cachedSocket = new Socket(config.getRs485Ip(), config.getRs485Port());
|
|
|
- cachedSocket.setSoTimeout(SOCKET_TIME_OUT);
|
|
|
- commFailCountClearAll();
|
|
|
- } else {
|
|
|
- l.info("openSocket cachedSocket is ok!");
|
|
|
- }
|
|
|
- } catch (IOException e) {
|
|
|
- e.printStackTrace();
|
|
|
- return AjaxResult.error("开启连接失败!请检查物联网网关连接或配置。");
|
|
|
- } finally {
|
|
|
-
|
|
|
- }
|
|
|
- return AjaxResult.success("开启连接成功!");
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * closeSocket
|
|
|
- *
|
|
|
- * @return
|
|
|
- */
|
|
|
- public AjaxResult closeSocket() {
|
|
|
- if (!config.isCommGlobal()) {
|
|
|
- l.warn("isCommGlobal == false [模拟器通信被禁用!]");
|
|
|
- return AjaxResult.error("模拟器通信被禁用!");
|
|
|
- }
|
|
|
- try {
|
|
|
- if (cachedSocket != null) {
|
|
|
- // todo:判断shutdown
|
|
|
- cachedSocket.getInputStream().close();
|
|
|
- cachedSocket.getOutputStream().close();
|
|
|
- cachedSocket.close();
|
|
|
- } else {
|
|
|
- l.info("cachedSocket == null!");
|
|
|
- }
|
|
|
- } catch (IOException e) {
|
|
|
- e.printStackTrace();
|
|
|
- return AjaxResult.success("关闭连接失败!请检查物联网网关连接或配置。");
|
|
|
- } finally {
|
|
|
- cachedSocket = null;
|
|
|
- commFailCountClearAll();
|
|
|
- }
|
|
|
- return AjaxResult.success("关闭连接成功!");
|
|
|
- }
|
|
|
|
|
|
/**
|
|
|
* 等同于ping命令。
|
|
@@ -984,30 +921,6 @@ public class CommSendService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private HashMap<Long, Integer> map = new HashMap<>();
|
|
|
-
|
|
|
- /**
|
|
|
- * @param simId
|
|
|
- * @return true超过通信失败次数限制
|
|
|
- */
|
|
|
- private boolean commFailCountAdd1(long simId) {
|
|
|
- l.info("map.containsKey(simId) = {}", map.containsKey(simId));
|
|
|
- if (map.containsKey(simId)) {
|
|
|
- map.put(simId, map.get(simId) + 1);
|
|
|
- } else {
|
|
|
- map.put(simId, 1);
|
|
|
- }
|
|
|
- return (map.get(simId) >= OFFLINE_LIMIT);
|
|
|
- }
|
|
|
-
|
|
|
- private void commFailCountClearOne(long simId) {
|
|
|
- map.remove(simId);
|
|
|
- }
|
|
|
-
|
|
|
- private void commFailCountClearAll() {
|
|
|
- map.clear();
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* https://mvnrepository.com/artifact/com.infiniteautomation/modbus4j/3.0.3
|
|
|
*/
|