From 09fcc4ec56a1ce6c0fcb308348d8dd5e2c08d336 Mon Sep 17 00:00:00 2001 From: fyxc <fyxc@qq.com> Date: 星期四, 22 五月 2025 14:33:06 +0800 Subject: [PATCH] server commit files --- src/main/java/com/zy/core/thread/impl/NyShuttleThread.java | 146 +++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 118 insertions(+), 28 deletions(-) diff --git a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java index a585d5e..1602251 100644 --- a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java +++ b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java @@ -57,6 +57,7 @@ private static final boolean DEBUG = false;//璋冭瘯妯″紡 + private List<JSONObject> socketReadResults = new ArrayList<>(); private List<JSONObject> socketResults = new ArrayList<>(); //鍘熷璁惧鏁版嵁 @@ -77,6 +78,7 @@ while (true) { try { listenSocketMessage(); + listenInit();//鐩戝惉鍒濆鍖栦簨浠� } catch (Exception e) { e.printStackTrace(); } @@ -135,7 +137,6 @@ Thread otherThread = new Thread(() -> { while (true) { try { - listenInit();//鐩戝惉鍒濆鍖栦簨浠� saveLog();//淇濆瓨鏁版嵁 } catch (Exception e) { e.printStackTrace(); @@ -150,7 +151,7 @@ return; } - if (System.currentTimeMillis() - shuttleProtocol.getDeviceDataLog() > 1000 * 5) { + if (System.currentTimeMillis() - shuttleProtocol.getDeviceDataLog() > 1000 * 1) { if (this.originDeviceData != null) { //閲囬泦鏃堕棿瓒呰繃5s锛屼繚瀛樹竴娆℃暟鎹褰� //淇濆瓨鏁版嵁璁板綍 @@ -194,7 +195,19 @@ } JSONObject result = JSON.parseObject(sb.toString());//寰楀埌鍝嶅簲缁撴灉闆� - if (!socketResults.isEmpty() && socketResults.size() >= 5) { + + String msgType = result.getString("msgType"); + if ("responseMsg".equals(msgType)) { + JSONObject response = result.getJSONObject("response"); + JSONObject body = response.getJSONObject("body"); + if (body.containsKey("workingMode")) { + //read + socketReadResults.add(body); + return; + } + } + + if (!socketResults.isEmpty() && socketResults.size() >= 20) { socketResults.remove(0);//娓呯悊澶磋妭鐐� } socketResults.add(result);//娣诲姞鏁版嵁 @@ -203,7 +216,7 @@ } } - public JSONObject getRequestBody(String type) { + public JSONObject getRequestBody(String type, String taskId) { try { // 鑾峰彇鏈嶅姟鍣ㄥ搷搴� JSONObject result = null; @@ -226,7 +239,14 @@ } if (!responseType.equals(type)) { - continue;//鍝嶅簲ID涓庤姹侷D涓嶄竴鑷达紝涓嶅湪璋冭瘯妯″紡涓� + continue;//鍝嶅簲绫诲瀷涓庤姹傜被鍨嬩笉涓�鑷达紝涓嶅湪璋冭瘯妯″紡涓� + } + + if (taskId != null) { + String responseTaskId = resultBody.get("taskId").toString(); + if (!responseTaskId.equals(taskId)) { + continue;//鍝嶅簲ID涓庤姹侷D涓嶄竴鑷达紝涓嶅湪璋冭瘯妯″紡涓� + } } result = socketResult; @@ -269,11 +289,24 @@ //----------璇诲彇鍥涘悜绌挎杞︾姸鎬�----------- NyShuttleHttpCommand readStatusCommand = getReadStatusCommand(slave.getId()); - JSONObject data = requestCommand(readStatusCommand); + requestCommandAsync(readStatusCommand);//璇锋眰鐘舵�� + + if (this.socketReadResults.isEmpty()) { + if (System.currentTimeMillis() - shuttleProtocol.getLastOnlineTime() > 1000 * 60) { + //鏈�鍚庝竴娆′笂绾挎椂闂磋秴杩�60s锛岃瀹氱绾� + this.shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.OFFLINE); + OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅绂荤嚎浜�1 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), slave.getId(), slave.getIp(), slave.getPort())); + } + return; + } + + JSONObject data = this.socketReadResults.get(0); + this.socketReadResults.remove(0); if (data == null) { if (System.currentTimeMillis() - shuttleProtocol.getLastOnlineTime() > 1000 * 60) { //鏈�鍚庝竴娆′笂绾挎椂闂磋秴杩�60s锛岃瀹氱绾� - shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.OFFLINE); + this.shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.OFFLINE); + OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戠┛姊溅绂荤嚎浜�2 ===>> [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())); }else { @@ -330,9 +363,13 @@ shuttleProtocol.setPakMk(true); } - if (shuttleProtocol.getProtocolStatusType() == null && shuttleProtocol.getDeviceStatus().intValue() == 0) { + if (shuttleProtocol.getProtocolStatusType() == null && shuttleProtocol.getDeviceStatus().intValue() == 1) { //灏忚溅绌洪棽鐘舵�併�佸皬杞︿换鍔$姸鎬佷负鏈煡锛岃瀹氭浘绂荤嚎杩囷紝闇�瑕佸浣嶆垚绌洪棽 - shuttleProtocol.setProtocolStatusType(ShuttleProtocolStatusType.IDLE); + this.shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); + } + + if (shuttleProtocol.getProtocolStatusType().equals(ShuttleProtocolStatusType.OFFLINE) && shuttleProtocol.getDeviceStatus().intValue() == 1) { + this.shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.IDLE); } this.originDeviceData = data; @@ -376,6 +413,9 @@ String requestType = resultBody.getString("requestType"); Integer requestId = resultHeader.getInteger("requestId"); if (requestType.equals("init")) { + removeIdx = i;//姝ゆ暟鎹凡缁忓鐞嗭紝浠庣粨鏋滈泦涓墧闄� + socketResults.remove(removeIdx); + Integer code = resultBody.getInteger("code"); //灏忚溅澶嶄綅璇锋眰 ShuttleCommand initCommand = getInitCommand(requestId, code); @@ -383,19 +423,13 @@ NyShuttleHttpCommand httpCommand = JSON.parseObject(initCommand.getBody(), NyShuttleHttpCommand.class); JSONObject requestResult = requestCommand(httpCommand); - removeIdx = i;//姝ゆ暟鎹凡缁忓鐞嗭紝浠庣粨鏋滈泦涓墧闄� - log.info(MessageFormat.format("銆恵0}銆戝洓鍚戣溅澶嶄綅涓婃姤 ===>> [code:{1}] [ip:{2}] [port:{3}]", slave.getId(), code, slave.getIp(), slave.getPort())); OutputQueue.SHUTTLE.offer(MessageFormat.format("銆恵0}銆戝洓鍚戣溅澶嶄綅涓婃姤 ===>> [code:{1}] [ip:{2}] [port:{3}]", slave.getId(), code, slave.getIp(), slave.getPort())); break; } } - - if (removeIdx != -1) { - socketResults.remove(removeIdx); - } } catch (Exception e) { -// e.printStackTrace(); + e.printStackTrace(); } } @@ -458,13 +492,17 @@ } for (NyShuttleHttpCommand requestCommand : commandList) { - JSONObject result = requestCommand(requestCommand); - if (result == null) { - return response;//璇锋眰澶辫触 + while (true) { + JSONObject result = requestCommand(requestCommand); + if (result == null) { +// return response;//璇锋眰澶辫触 + continue;//璇锋眰澶辫触灏濊瘯閲嶆柊璇锋眰 + } + this.shuttleProtocol.setSendTime(System.currentTimeMillis());//鎸囦护涓嬪彂鏃堕棿 + response.setMessage(JSON.toJSONString(result)); + response.setResult(true); + break; } - this.shuttleProtocol.setSendTime(System.currentTimeMillis());//鎸囦护涓嬪彂鏃堕棿 - response.setMessage(JSON.toJSONString(result)); - response.setResult(true); } return response; } catch (Exception e) { @@ -704,6 +742,32 @@ } @Override + public boolean isFault() { + if (this.shuttleProtocol.getErrorCode() == null + || this.shuttleProtocol.getMode() == null + || this.shuttleProtocol.getExtend() == null + ) { + return false; + } + + if (this.shuttleProtocol.getMode() == 0) { + return true; + } + + if (!this.shuttleProtocol.getErrorCode().equals("0")) { + return true; + } + + InnerSuhttleExtend extend = (InnerSuhttleExtend) this.shuttleProtocol.getExtend(); + + if (extend.getSuspendState() == 1) { + return true; + } + + return false; + } + + @Override public List<NavigateNode> getMoveAdvancePath() { ObjectMapper objectMapper = SpringUtils.getBean(ObjectMapper.class); NavigateMapData navigateMapData = SpringUtils.getBean(NavigateMapData.class); @@ -813,6 +877,13 @@ } @Override + public boolean offerSystemMsg(String format, Object... arguments) { + String msg = News.replace(format, arguments); + shuttleProtocol.setSystemMsg(msg); + return true; + } + + @Override public ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed, List<NavigateNode> nodes) { NavigateMapData navigateMapData = SpringUtils.getBean(NavigateMapData.class); NyShuttleHttpCommand httpStandard = getHttpStandard(slave.getId(), taskNo); @@ -845,8 +916,8 @@ data.put("xp", xp); data.put("yp", yp); data.put("z", z); - data.put("x", mapNode.getXBase()); - data.put("y", mapNode.getYBase()); + data.put("x", mapNode.getYBase()); + data.put("y", mapNode.getXBase()); path.add(data); } @@ -962,8 +1033,8 @@ location.put("xp", row); location.put("yp", bay); location.put("z", lev); - location.put("x", mapNode.getXBase()); - location.put("y", mapNode.getYBase()); + location.put("x", mapNode.getYBase()); + location.put("y", mapNode.getXBase()); HashMap<String, Object> body = new HashMap<>(); body.put("responseType", "init");//澶嶄綅 @@ -1064,17 +1135,20 @@ // System.out.println("Sent message to server: " + JSON.toJSONString(httpCommand)); String requestType = null; + String taskId = null; try { requestType = httpCommand.getRequest().getBody().get("requestType").toString(); + taskId = httpCommand.getRequest().getBody().get("taskId").toString(); } catch (Exception e) { - return null; +// return null; + //taskId鍙兘鍙栫┖锛屼笉鎶ラ敊锛屾甯告儏鍐� } // 鑾峰彇鏈嶅姟鍣ㄥ搷搴� // 灏濊瘯10娆� JSONObject result = null; for (int i = 0; i < 10; i++) { - result = getRequestBody(requestType); + result = getRequestBody(requestType, taskId); if (result == null) { try { Thread.sleep(100); @@ -1088,6 +1162,22 @@ return result;//杩斿洖Body缁撴灉闆� } + private void requestCommandAsync(NyShuttleHttpCommand httpCommand) throws IOException { + if (this.socket == null) { + return; + } + + //鍘嬬缉鏁版嵁鍖� + JSONObject data = JSON.parseObject(JSON.toJSONString(httpCommand)); + data.remove("nodes"); + + // 鑾峰彇杈撳嚭娴� + OutputStreamWriter writer = new OutputStreamWriter(this.socket.getOutputStream()); + writer.write(JSON.toJSONString(data) + "\r\n"); + writer.flush(); +// System.out.println("Sent message to server: " + JSON.toJSONString(httpCommand)); + } + private JSONObject filterBodyData(JSONObject data) { Object response = data.get("response"); if (response == null) { -- Gitblit v1.9.1