From d53c03f383ecd50b62dd1e069c339b57ded8702b Mon Sep 17 00:00:00 2001 From: liurunyu <lry9898@163.com> Date: 星期五, 01 十二月 2023 14:52:25 +0800 Subject: [PATCH] 1、RTU模拟测试系统开发; 2、RTU模拟测试系统管控系统开发; 3、联合测试中发现的协议bug修改; 4、联合测试中发现通信中间件的bug修改。 --- pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/TcpClUnit.java | 142 ++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 120 insertions(+), 22 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 index 167adde..78a8b90 100644 --- 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 @@ -5,10 +5,12 @@ import com.dy.common.mw.UnitStartedCallbackInterface; 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; @@ -26,7 +28,7 @@ private static ThreadPool.Pool pool ; private static Map<String, MyThreadJob> jobMap = new HashMap<>() ; - private static Integer totalRunedClientCount = 0; + private static Integer totalRtuClientCount = 0; private static Integer totalSendDataCount = 0; private static Integer totalOverClientCount = 0; @@ -72,23 +74,46 @@ if(!ServerProperties.startWork){ Thread.sleep(100L); }else{ - startTime = System.currentTimeMillis() ; - for(Long addr = ServerProperties.rtuAddrStart; addr <= ServerProperties.rtuAddrEnd; addr++){ - totalRunedClientCount++ ; - createImitate(addr) ; - } - startJob() ; - while(true){ - if(totalOverClientCount.longValue() >= totalRunedClientCount.longValue()){ - Long seconds = (System.currentTimeMillis() - startTime)/1000 ; - RmiClUnit.getInstance().allOver(seconds) ; - System.out.println("鍏辩敤鏃�" + seconds + "绉�"); - break ; - }else{ - Thread.sleep(100L); + 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() ; + for(MyThreadJob job : collection){ + connectServer(job) ; + } + log.info("鍚姩鎵�鏈塕TU杩炴帴閫氫俊涓棿浠�"); + + while (true){ + int noConnectedCount = checkConnected() ; + if(noConnectedCount > 0){ + log.info("绛夊緟" + noConnectedCount + "鍙癛TU杩炴帴缃戠粶"); + Thread.sleep(100L); + }else{ + break ; + } + } + + startJob() ; + 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 ; } - break; } } } catch (Exception e) { @@ -106,18 +131,71 @@ 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(new Runnable(){ @Override public void run() { try { - Thread.sleep(1000L); + int notOverCount; while(true){ + notOverCount = 0 ; Collection<MyThreadJob> collection = jobMap.values() ; for(MyThreadJob job : collection){ - pool.putJob(job); + if(!job.isOver){ + notOverCount++ ; + pool.putJob(job); + } } - Thread.sleep(ServerProperties.sendInterval * 1000); + if(notOverCount > 0){ + log.info("褰撳墠杩樻湁" + notOverCount + "鍙癛TU鏈畬鎴愪换鍔�"); + Thread.sleep(ServerProperties.sendInterval * 1000); + }else{ + break ; + } } } catch (Exception e) { e.printStackTrace(); @@ -129,17 +207,37 @@ public static synchronized void clientSendData(){ totalSendDataCount++; - if(totalSendDataCount % 100 == 0){ + 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 % 100 == 0){ + if(totalOverClientCount.longValue() >= totalRtuClientCount.longValue()){ RmiClUnit.getInstance().reportHadReportOver(totalOverClientCount); - System.out.println("宸叉湁" + 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