package com.dy.testClient.tcpClient; import com.dy.common.mw.UnitAdapterInterface; import com.dy.common.mw.UnitInterface; import com.dy.common.mw.UnitStartedCallbackInterface; import com.dy.common.threadPool.ThreadPool; import com.dy.common.threadPool.TreadPoolFactory; import com.dy.testClient.ServerProperties; import com.dy.testClient.rmiClient.RmiClUnit; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; 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 jobMap = new HashMap<>() ; private static Integer totalRunedClientCount = 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(UnitStartedCallbackInterface callback) throws Exception { pool = TreadPoolFactory.getThreadPoolLong() ; System.out.println("Tcp Client模块成功启动"); this.doStart(); callback.call(null) ; } @Override public void stop(UnitStartedCallbackInterface callback) throws Exception { callback.call(null); } private void doStart(){ new Thread(new Runnable(){ @Override public void run() { try { while(true){ 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); } } 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 startJob(){ new Thread(new Runnable(){ @Override public void run() { try { Thread.sleep(1000L); while(true){ Collection collection = jobMap.values() ; for(MyThreadJob job : collection){ pool.putJob(job); } Thread.sleep(ServerProperties.sendInterval * 1000); } } catch (Exception e) { e.printStackTrace(); } } }).start(); } public static synchronized void clientSendData(){ totalSendDataCount++; if(totalSendDataCount % 100 == 0){ RmiClUnit.getInstance().reportHadReportCount(totalSendDataCount); System.out.println("已经发送" + totalSendDataCount + "条数据"); } } public static synchronized void clientOver(){ totalOverClientCount++; if(totalOverClientCount % 100 == 0){ RmiClUnit.getInstance().reportHadReportOver(totalOverClientCount); System.out.println("已有" + totalOverClientCount + "完成了任务"); } } }