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.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_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() { 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public boolean isDestroy() { 
 | 
        return false; 
 | 
    } 
 | 
  
 | 
  
 | 
} 
 |