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); 
 | 
        } 
 | 
    } 
 | 
} 
 |