From ee6e575076ba17c1fc8f4ba33253b7ea0fba45f8 Mon Sep 17 00:00:00 2001
From: wuzeyu <1223318623@qq.com>
Date: 星期四, 30 十一月 2023 10:25:04 +0800
Subject: [PATCH] Merge branch 'master' of http://8.140.179.55:20000/r/pipIrr-SV

---
 pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/MyThreadJob.java |  130 +++++++++++++++++++++++++++++++++++--------
 1 files changed, 105 insertions(+), 25 deletions(-)

diff --git a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/MyThreadJob.java b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/MyThreadJob.java
index eee927c..0a07ff7 100644
--- a/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/MyThreadJob.java
+++ b/pipIrr-platform/pipIrr-mw/pipIrr-mwTest-client/src/main/java/com/dy/testClient/tcpClient/MyThreadJob.java
@@ -1,46 +1,126 @@
 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.mina.core.future.CloseFuture;
+import org.apache.mina.core.session.IoSession;
 
 public class MyThreadJob  implements ThreadPool.Job {
 
     public String rtuAddr;
+    public String serverIp;
+    public Integer serverPort;
+
+    public IoSession session ;
+
+    public static final int connectTimeout = 3000 ;
+
+    public int sendTimes = 0 ;//鍙戦�佹暟鎹鏁�
+    public int heartbeatTimes = 0 ;//涓婃姤蹇冭烦娆℃暟
+
+    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(session == null){
+            IoSession se = new TcpConnect().createSession(this.rtuAddr, this, this.serverIp, this.serverPort, connectTimeout, new TcpHandler()) ;
+            if(se != null){
+                this.session = se ;
+            }
+        }else{
+            if(sendTimes <= ServerProperties.sendTimes){
+                sendDataOfP206V1_0_0() ;
+            }else{
+                this.jobOver() ;
+            }
         }
     }
 
+    private void sendDataOfP206V1_0_0(){
+        try{
+            if(heartbeatTimes >= ServerProperties.heartbeatTimes){
+                heartbeatTimes = 0 ;
+                this.sendReportData() ;
+                sendTimes++ ;
+            }else{
+                this.sendHeartbeat() ;
+                heartbeatTimes++ ;
+            }
+        }catch(Exception e){
+            e.printStackTrace();
+        }
+    }
+    private void sendHeartbeat(){
+        try{
+            byte[] bs = this.createHeartbeat() ;
+            this.session.write(bs) ;
+        }catch (Exception e){
+            e.printStackTrace();
+        }
+    }
+
+    private void sendReportData(){
+        TcpClUnit.clientSendData();
+    }
+
+    private void jobOver(){
+        CloseFuture closeFuture = session.closeOnFlush() ;
+        this.isOver = true ;
+        TcpClUnit.clientOver() ;
+    }
+
+    /**
+     * 鏋勯�犱笅琛屾暟鎹�
+     * @return 瀛楄妭鏁扮粍
+     * @throws Exception 寮傚父
+     */
+    public byte[] createHeartbeat( ) throws Exception {
+        CommonV1_0_1 commonV1_0_1 = new CommonV1_0_1() ;
+        byte[] bytes ;
+        byte[] bsHead = new byte[ProtocolConstantV206V1_0_0.lenHead2Code] ;
+        byte index = 0 ;
+        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = 0 ;//甯ч暱搴�
+
+        index++ ;
+        bsHead[index] = ProtocolConstantV206V1_0_0.P_Head_Byte ;
+
+        index++ ;
+        bsHead[index] = commonV1_0_1.createCtrl((byte)0) ;
+
+        index++ ;
+        GlCreate.createRtuAddr(this.rtuAddr, bsHead, index);
+        index += 5 ;
+
+        ByteUtil.hex2Bytes("02", bsHead, index) ;
+
+        byte[] bs = new byte[1] ;
+        bs[0] = (byte)0xF2 ;//鏁版嵁鍩燂細 1 涓瓧鑺傦紝F0 鐧诲綍锛� F1 閫�鍑虹櫥褰曪紝F2 鍦ㄧ嚎淇濇寔銆�
+
+        bytes = ByteUtil.bytesMerge(bsHead, bs) ;
+
+        GlCreate.createLen(bytes);//闀垮害鏀惧瓧鑺傛暟缁勪腑
+
+        bytes = GlCreate.createCrcTail(bytes) ;//CRC鍜屽熬鍙犲姞瀛楄妭鏁扮粍涓�
+
+        return bytes ;
+    }
+
+
 
     @Override
     public void destroy() {

--
Gitblit v1.8.0