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<String, MyThreadJob> 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<MyThreadJob> 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 + "完成了任务");
|
}
|
}
|
}
|