From edacfca5a8e4e3abd4498eb81a34696b9ccd4c73 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 19 九月 2023 10:07:24 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/core/thread/NyShuttleThread.java | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 50 insertions(+), 10 deletions(-)
diff --git a/src/main/java/com/zy/core/thread/NyShuttleThread.java b/src/main/java/com/zy/core/thread/NyShuttleThread.java
index 1ab039c..b84f13c 100644
--- a/src/main/java/com/zy/core/thread/NyShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/NyShuttleThread.java
@@ -28,6 +28,8 @@
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
+import java.io.IOException;
+import java.net.Socket;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Date;
@@ -43,6 +45,7 @@
private ShuttleSlave slave;
private NyShuttleProtocol shuttleProtocol;
private RedisUtil redisUtil;
+ private Socket socket;
public NyShuttleThread(ShuttleSlave slave,RedisUtil redisUtil) {
this.slave = slave;
@@ -84,6 +87,10 @@
private void read() {
try {
+ if (this.socket == null || this.socket.isClosed()) {
+ //閾炬帴鏂紑閲嶆柊閾炬帴
+ this.connect();
+ }
readStatus();
//鍥涘悜绌挎杞︾┖闂层�佹湁浠诲姟銆佹爣璁颁负true銆佸瓨鍦ㄤ换鍔℃寚浠わ紝闇�瑕佹墽琛屼换鍔$殑涓嬩竴鏉℃寚浠�
if (shuttleProtocol.getFree() == ShuttleStatusType.IDLE.id
@@ -108,9 +115,10 @@
//----------璇诲彇鍥涘悜绌挎杞︾姸鎬�-----------
NyShuttleHttpCommand readStatusCommand = NyHttpUtils.getReadStatusCommand(slave.getId());
- JSONObject jsonObject = NyHttpUtils.requestCommand(readStatusCommand);
+ JSONObject jsonObject = NyHttpUtils.requestCommand(socket, readStatusCommand);
if (jsonObject == null) {
- OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+ shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.OFFLINE);
+ OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅Socket鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
}else {
//鎵嬪姩鐘舵��/鑷姩鐘舵��
shuttleProtocol.setWorkingMode(jsonObject.getInteger("workingMode"));
@@ -159,7 +167,7 @@
errCode.add(Integer.parseInt(o.toString()));
}
//鏁呴殰鐮�
- shuttleProtocol.setErrCode(errCode);
+ shuttleProtocol.setErrCode(errCode.get(0));
//鎬婚噷绋嬫暟
shuttleProtocol.setStatusSum(jsonObject.getObject("statusSum", NyShuttleProtocol.StatusSumClass.class));
//闈炶嚜鍔ㄧ姸鎬佹椂闂磋鏃�
@@ -236,12 +244,29 @@
}
} catch (Exception e) {
e.printStackTrace();
- OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅plc鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+ OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅Socket鐘舵�佷俊鎭け璐� ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+ try {
+ this.socket.close();
+ this.socket = null;
+ Thread.sleep(1000);
+ this.connect();
+ } catch (IOException | InterruptedException exception) {
+ e.printStackTrace();
+ }
}
}
@Override
public boolean connect() {
+ try {
+ Socket socket = new Socket(slave.getIp(),slave.getPort());
+ socket.setSoTimeout(60000);
+ socket.setKeepAlive(true);
+ this.socket = socket;
+ log.info(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅Socket閾炬帴鎴愬姛 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+ } catch (IOException e) {
+ OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅Socket閾炬帴澶辫触 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort()));
+ }
return true;
}
@@ -268,7 +293,21 @@
}
//鍙戝嚭璇锋眰
- JSONObject result = NyHttpUtils.requestCommand(command);
+ JSONObject result = null;
+ try {
+ result = NyHttpUtils.requestCommand(socket, command);
+ } catch (IOException e) {
+ try {
+ this.socket.close();
+ this.socket = null;
+ Thread.sleep(1000);
+ this.connect();
+ } catch (IOException exception) {
+ exception.printStackTrace();
+ } catch (InterruptedException ex) {
+ throw new RuntimeException(ex);
+ }
+ }
if (result == null) {
return false;//璇锋眰澶辫触
}
@@ -355,10 +394,10 @@
return false;//灏忚溅鐘舵�佸繖锛岀姝㈡墽琛屽懡浠�
}
- //妫�娴嬪皬杞︽槸鍚﹁杩涙彁鍗囨満锛屽闇�瑕佽繘鎻愬崌鏈哄垯璋冨害鎻愬崌鏈�
- if (!checkLiftStation(wrkNo)) {
- return false;
- }
+// //妫�娴嬪皬杞︽槸鍚﹁杩涙彁鍗囨満锛屽闇�瑕佽繘鎻愬崌鏈哄垯璋冨害鎻愬崌鏈�
+// if (!checkLiftStation(wrkNo)) {
+// return false;
+// }
//妫�娴嬬┛姊溅鏄惁鍦ㄦ彁鍗囨満鍐�
if (!checkShuttleInTheLift(wrkNo)) {
@@ -399,7 +438,8 @@
null,
null,
JSON.toJSONString(command),
- null
+ null,
+ JSON.toJSONString(shuttleProtocol)
);
shuttleOptService.insert(opt);
}
--
Gitblit v1.9.1