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