From b63eef2cfb054b1ead234ab93e05a2aa28775d91 Mon Sep 17 00:00:00 2001 From: zhubaomin <zhubaomin> Date: 星期四, 17 四月 2025 14:54:26 +0800 Subject: [PATCH] 优化灌溉计划发布前判断条件 --- pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpClUnit.java | 251 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 251 insertions(+), 0 deletions(-) diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpClUnit.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpClUnit.java new file mode 100644 index 0000000..4537b10 --- /dev/null +++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpClUnit.java @@ -0,0 +1,251 @@ +package com.dy.testClient.tcpClient; + +import com.dy.common.mw.UnitAdapterInterface; +import com.dy.common.mw.UnitInterface; +import com.dy.common.mw.UnitCallbackInterface; +import com.dy.common.threadPool.ThreadPool; +import com.dy.common.threadPool.TreadPoolFactory; +import com.dy.common.util.Callback; +import com.dy.testClient.ServerProperties; +import com.dy.testClient.rmiClient.RmiClUnit; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.mina.core.session.IoSession; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +public class TcpClUnit implements UnitInterface { + + private static final Logger log = LogManager.getLogger(TcpClUnit.class) ; + + private static TcpClUnit instance = new TcpClUnit() ; + + public static TcpClUnitAdapter adapter ; + public static TcpClUnitConfigVo confVo ; + + private static ThreadPool.Pool pool ; + private static Map<String, MyThreadJob> jobMap = new HashMap<>() ; + + private static Integer totalRtuClientCount = 0; + private static Integer totalSendDataCount = 0; + private static Integer totalOverClientCount = 0; + + private static Long startTime = 0L ; + + private TcpClUnit(){} ; + + public static TcpClUnit getInstance(){ + return instance ; + } + + @Override + public void setAdapter(UnitAdapterInterface adapter) throws Exception { + if(adapter == null){ + throw new Exception("Tcp Client妯″潡閫傞厤鍣ㄥ璞′笉鑳戒负绌猴紒") ; + } + TcpClUnit.adapter = (TcpClUnitAdapter)adapter ; + TcpClUnit.confVo = TcpClUnit.adapter.getConfig() ; + if(TcpClUnit.confVo == null){ + throw new Exception("Tcp Client妯″潡閰嶇疆瀵硅薄涓嶈兘涓虹┖锛�") ; + } + } + + @Override + public void start(UnitCallbackInterface callback) throws Exception { + pool = TreadPoolFactory.getThreadPoolLong() ; + System.out.println("Tcp Client妯″潡鎴愬姛鍚姩"); + this.doStart(); + callback.call(null) ; + } + + @Override + public void stop(UnitCallbackInterface callback) throws Exception { + callback.call(null); + } + + private void doStart(){ + new Thread(new Runnable(){ + @Override + public void run() { + try { + while(true){ + if(!ServerProperties.startTcpConnectWork){ + Thread.sleep(100L); + }else{ + try{ + startTime = System.currentTimeMillis() ; + for(Long addr = ServerProperties.rtuAddrStart; addr <= ServerProperties.rtuAddrEnd; addr++){ + totalRtuClientCount++ ; + createImitate(addr) ; + } + log.info("鍏辨ā鎷熶簡" + totalRtuClientCount + "鍙癛TU"); + + Collection<MyThreadJob> collection = jobMap.values() ; + int connectedCount = 0 ; + for(MyThreadJob job : collection){ + connectServer(job) ; + connectedCount++ ; + log.info("褰撳墠寤虹珛涓庨�氫俊涓棿浠惰繛鎺ョ殑RTU鏁伴噺涓猴細" + connectedCount); + } + log.info("鎵�鏈塕TU宸蹭笌閫氫俊涓棿浠跺缓绔嬭繛鎺�"); + + while (true){ + int noConnectedCount = checkConnected() ; + if(noConnectedCount > 0){ + log.info("绛夊緟" + noConnectedCount + "鍙癛TU杩炴帴缃戠粶"); + Thread.sleep(100L); + }else{ + break ; + } + } + + while (true){ + if(!ServerProperties.startRtuReportWork){ + Thread.sleep(100L); + }else{ + startJob() ; + break ; + } + } + + while(true){ + if(totalOverClientCount.longValue() >= totalRtuClientCount.longValue()){ + Long seconds = (System.currentTimeMillis() - startTime)/1000 ; + RmiClUnit.getInstance().allOver(seconds) ; + log.info("鍏辩敤鏃�" + seconds + "绉�"); + break ; + }else{ + Thread.sleep(100L); + } + } + }catch (Exception e){ + e.printStackTrace(); + }finally { + break ; + } + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }).start(); + } + + /** + * 鍒涘缓RTU妯℃嫙MyThreadJob + * @param rtuAddr rtu鍦板潃 + */ + private void createImitate(Long rtuAddr){ + jobMap.put("" + rtuAddr, new MyThreadJob("" + rtuAddr, ServerProperties.tcpServerIp, ServerProperties.tcpServerPort)) ; + } + + + private void connectServer(MyThreadJob job){ + if(job.session == null){ + try{ + new TcpConnect().createSession(job.rtuAddr, + job, + job.serverIp, + job.serverPort, + job.connectTimeout, + new TcpHandler(), + new Callback() { + @Override + public void call(Object obj) { + if(obj == null){ + log.error("鍒涘缓缃戠粶浼氳瘽杩斿洖涓簄ull"); + }else{ + job.session = (IoSession)obj ; + } + } + @Override + public void call(Object... objs) { + } + @Override + public void exception(Exception e) { + } + }) ; + }catch (Exception e){ + job.exceptionOnConnect = true ; + e.printStackTrace(); + } + } + } + + private int checkConnected(){ + int noConnectedCount = 0 ; + Collection<MyThreadJob> collection = jobMap.values() ; + for(MyThreadJob job : collection){ + if(job.session == null && !job.exceptionOnConnect){ + noConnectedCount++ ; + } + } + return noConnectedCount; + } + + private void startJob(){ + new Thread(() -> { + try { + int notOverCount; + while(true){ + notOverCount = 0 ; + Collection<MyThreadJob> collection = jobMap.values() ; + for(MyThreadJob job : collection){ + if(!job.isOver){ + notOverCount++ ; + pool.putJob(job); + } + } + if(notOverCount > 0){ + log.info("褰撳墠杩樻湁" + notOverCount + "鍙癛TU鏈畬鎴愪换鍔�"); + Thread.sleep(ServerProperties.sendInterval * 1000); + }else{ + break ; + } + } + } catch (Exception e) { + e.printStackTrace(); + } + }).start(); + } + + + public static synchronized void clientSendData(){ + totalSendDataCount++; + if(totalOverClientCount.longValue() >= totalRtuClientCount.longValue()){ + RmiClUnit.getInstance().reportHadReportCount(totalSendDataCount); + System.out.println("宸茬粡鍙戦��" + totalSendDataCount + "鏉℃暟鎹紙蹇冭烦鍜屼笂鎶ワ級"); + }else{ + if(totalRtuClientCount > 100){ + if(totalSendDataCount % 100 == 0){ + RmiClUnit.getInstance().reportHadReportCount(totalSendDataCount); + System.out.println("宸茬粡鍙戦��" + totalSendDataCount + "鏉℃暟鎹紙蹇冭烦鍜屼笂鎶ワ級"); + } + }else{ + RmiClUnit.getInstance().reportHadReportCount(totalSendDataCount); + System.out.println("宸茬粡鍙戦��" + totalSendDataCount + "鏉℃暟鎹紙蹇冭烦鍜屼笂鎶ワ級"); + } + } + } + + public static synchronized void clientOver(){ + totalOverClientCount++; + if(totalOverClientCount.longValue() >= totalRtuClientCount.longValue()){ + RmiClUnit.getInstance().reportHadReportOver(totalOverClientCount); + System.out.println("宸叉湁" + totalOverClientCount + "涓猂TU瀹屾垚浜嗕换鍔�"); + }else{ + if(totalRtuClientCount > 100) { + if (totalOverClientCount % 100 == 0) { + RmiClUnit.getInstance().reportHadReportOver(totalOverClientCount); + System.out.println("宸叉湁" + totalOverClientCount + "涓猂TU瀹屾垚浜嗕换鍔�"); + } + }else{ + RmiClUnit.getInstance().reportHadReportOver(totalOverClientCount); + System.out.println("宸叉湁" + totalOverClientCount + "涓猂TU瀹屾垚浜嗕换鍔�"); + } + } + } +} -- Gitblit v1.8.0