package com.dy.rtuMw3rd.tcp4Bjnl; import com.alibaba.fastjson2.JSON; import com.dy.rtuMw3rd.tcp4Bjnl.protocol.*; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.util.Timer; import java.util.TimerTask; /** * @Author: liurunyu * @Date: 2025/2/26 14:39 * @Description */ public class Worker extends TimerTask { private static final Logger log = LogManager.getLogger(Worker.class) ; private static Worker instance = new Worker() ; private String apikey ; private String secretkey ; private Long workInterval ;//循环任务间隔 private Timer timer; private boolean stop; private boolean first = true ; private static boolean isLogined = false ; private Worker(){ this.timer = new Timer(); this.stop = false ; } public static Worker getInstance(){ return instance ; } public void setApikey(String apikey){ this.apikey = apikey ; } public void setSecretkey(String secretkey){ this.secretkey = secretkey ; } public void setWorkInterval(Long workInterval){ this.workInterval = workInterval ; } public void setLogined(){ log.info("北京农林--请求登录成功"); isLogined = true ; } public void stop(){ this.stop = true ; if(this.timer != null){ this.timer.cancel(); } } public boolean isStop(){ return this.stop ; } public void start(){ new Thread(() -> { while(true){ try { login() ; }catch (Exception e){ log.error("北京农林--请求登录异常" + (e.getMessage() == null ? "" : (":" + e.getMessage())), e); } try{ Thread.sleep(10000); }catch (Exception e){ } if(isLogined){ timer.schedule(this, 0, this.workInterval); break ; } } }).start(); } @Override public void run() { if(first){ first = false ; }else{ if(TcpConnect.isConnected() && isLogined) { try{ heartbeat() ; }catch(Exception e){ log.error("北京农林--发送心跳异常" + (e.getMessage() == null ? "" : (":" + e.getMessage())), e); } } } } private void login(){ ParamLogin pl = new ParamLogin() ; pl.protocol = new ParamProtocol() ; pl.auth = new ParamAuth() ; pl.protocol.version = BjnlProtocol.ProtocolVersion ; pl.protocol.protocolcode = BjnlProtocol.Protocolcode ; pl.auth.apikey = apikey ; pl.auth.secretkey = secretkey ; String json = JSON.toJSONString(pl) ; byte[] bs = BjnlCommon.wrap(json) ; try { TcpConnect.output(bs); } catch (Exception e) { log.error(e.getMessage(), e); } } private void heartbeat() throws Exception{ try { TcpConnect.output(BjnlProtocol.HeartBeat); } catch (Exception e) { log.error(e.getMessage(), e); } } }