| | |
| | | package com.dy.testClient.tcpClient; |
| | | |
| | | import com.dy.common.mw.protocol.p206V1_0_0.CommonV1_0_1; |
| | | import com.dy.common.mw.protocol.p206V1_0_0.ProtocolConstantV206V1_0_0; |
| | | import com.dy.common.mw.protocol.p206V1_0_0.parse.global.GlCreate; |
| | | import com.dy.common.threadPool.ThreadPool; |
| | | import com.dy.testClient.httpCl.*; |
| | | |
| | | import java.util.Base64; |
| | | 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){ |
| | | public MyThreadJob(String rtuAddr, String serverIp, Integer serverPort){ |
| | | this.rtuAddr = rtuAddr ; |
| | | this.serverIp = serverIp ; |
| | | this.serverPort = serverPort ; |
| | | } |
| | | |
| | | @Override |
| | | public void execute() throws Exception { |
| | | testP206V1_0_0() ; |
| | | } |
| | | |
| | | private void testP206V1_0_0(){ |
| | | try{ |
| | | RtuData4MeterV1_0 rd = new RtuData4MeterV1_0() ; |
| | | byte[] bs = rd.create(rtuAddr) ; |
| | | bs = Base64.getEncoder().encode(bs) ; |
| | | |
| | | UpDataPayloadVo payloadVo = new UpDataPayloadVo() ; |
| | | payloadVo.APPdata = new String(bs, "UTF-8") ; |
| | | |
| | | UpDataVo vo = new UpDataVo(rtuAddr, "8086" + rtuAddr) ; |
| | | vo.payload = payloadVo ; |
| | | String json = vo.toJson() ; |
| | | byte[] bytes = json.getBytes() ; |
| | | HttpPost.post(bytes); |
| | | }catch(Exception e){ |
| | | e.printStackTrace(); |
| | | }finally{ |
| | | HttpClUnit.clientOver() ; |
| | | if(!this.isOver){ |
| | | if(session != null){ |
| | | if(sendTimes <= ServerProperties.sendTimes){ |
| | | log.info("RTU" + rtuAddr + "开始任务"); |
| | | log.info("RTU" + rtuAddr + "将要执行" + ServerProperties.sendTimes + "轮次任务,当前轮次是" + sendTimes); |
| | | sendDataOfP206V1_0_0(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_0_0(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() { |