New file |
| | |
| | | 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; |
| | | } |
| | | |
| | | |
| | | } |