package com.dy.testClient.tcpClient;
|
|
import com.dy.common.threadPool.ThreadPool;
|
import com.dy.common.util.ByteUtil;
|
import com.dy.testClient.ServerProperties;
|
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.Logger;
|
import org.apache.mina.core.session.IoSession;
|
|
public class MyThreadJob implements ThreadPool.Job {
|
|
private static final Logger log = LogManager.getLogger(MyThreadJob.class) ;
|
|
public static String icCardAddr = "3B7D1E1A" ;
|
public static String icCardNo = "61181622830147821" ;
|
public static String openValveDt = "240711163700" ;
|
public static String cdC0 = "C0" ;
|
public static String cd83Open = "83Open" ;
|
public static String cd83Close = "83Close" ;
|
|
|
public static String curCd = cdC0 ;//通过修改这个值,来改变上报数据类型
|
|
public String rtuAddr;
|
public String serverIp;
|
public Integer serverPort;
|
|
public IoSession session ;
|
public boolean exceptionOnConnect = false ;
|
|
public static final int connectTimeout = 3000 ;
|
|
public int sendTimes = 1 ;//发送数据次数
|
public int heartbeatTimes = 1 ;//上报心跳次数
|
|
public long overStart = 0L;
|
public boolean isOver = false ;
|
|
public MyThreadJob(){
|
}
|
public MyThreadJob(String rtuAddr, String serverIp, Integer serverPort){
|
this.rtuAddr = rtuAddr ;
|
this.serverIp = serverIp ;
|
this.serverPort = serverPort ;
|
}
|
|
@Override
|
public void execute() throws Exception {
|
if(!this.isOver){
|
if(session != null){
|
if(sendTimes <= ServerProperties.sendTimes){
|
log.info("RTU" + rtuAddr + "开始任务");
|
log.info("RTU" + rtuAddr + "将要执行" + ServerProperties.sendTimes + "轮次任务,当前轮次是" + sendTimes);
|
sendDataOfP206V1(curCd) ;
|
}else{
|
if(ServerProperties.sendOverThenCloseConnect == 1){
|
log.info("RTU" + rtuAddr + "等待一会,以接收通信中间件下行数据");
|
if(overStart == 0){
|
overStart = System.currentTimeMillis() ;
|
}else{
|
long now = System.currentTimeMillis() ;
|
if(now - overStart >= 30 * 1000){
|
this.jobOver() ;
|
}
|
}
|
}else{
|
this.jobOver() ;
|
}
|
}
|
}
|
}
|
}
|
|
private void sendDataOfP206V1(String cd){
|
try{
|
if(heartbeatTimes > ServerProperties.heartbeatTimes){
|
heartbeatTimes = 1 ;
|
byte[] bs = null ;
|
if(cd.equals(cdC0)){
|
bs = RtuUpData.createCdC0(this.rtuAddr) ;
|
}else if(cd.equals(cd83Open)){
|
bs = RtuUpData.createCd83Open(this.rtuAddr, icCardAddr, icCardNo, openValveDt) ;
|
}else if(cd.equals(cd83Close)){
|
bs = RtuUpData.createCd83Close(this.rtuAddr, icCardAddr, icCardNo, openValveDt) ;
|
}
|
this.session.write(bs) ;
|
log.info("RTU" + rtuAddr + "发送了上行数据:" + ByteUtil.bytes2Hex(bs, false));
|
TcpClUnit.clientSendData();
|
sendTimes++ ;
|
}else{
|
this.sendHeartbeat() ;
|
TcpClUnit.clientSendData();
|
heartbeatTimes++ ;
|
}
|
}catch(Exception e){
|
e.printStackTrace();
|
}
|
}
|
private void sendHeartbeat(){
|
try{
|
byte[] bs = RtuUpData.createHeartbeat(this.rtuAddr) ;
|
this.session.write(bs) ;
|
log.info("RTU" + rtuAddr + "发送了心跳数据:" + ByteUtil.bytes2Hex(bs, false));
|
}catch (Exception e){
|
e.printStackTrace();
|
}
|
}
|
|
|
private void jobOver(){
|
if(ServerProperties.sendOverThenCloseConnect == 1){
|
session.closeOnFlush() ;
|
}
|
this.isOver = true ;
|
TcpClUnit.clientOver() ;
|
}
|
|
|
|
|
@Override
|
public void destroy() {
|
}
|
|
@Override
|
public boolean isDestroy() {
|
return false;
|
}
|
|
|
}
|