From b81d0cf47a08b3b5de01bf753fb71f6d1fda783a Mon Sep 17 00:00:00 2001
From: fctom1215 <fctom1215@outlook.com>
Date: 星期日, 23 二月 2020 15:21:02 +0800
Subject: [PATCH] Merge branch 'master' of https://gitee.com/endian11/DriveJudge

---
 app/src/main/java/safeluck/drive/evaluation/platformMessage/AttachInfo.java    |    2 
 app/src/main/res/layout/layout_rtk_setting.xml                                 |    1 
 im_lib/src/main/java/com/anyun/im_lib/listener/OnEventListener.java            |    2 
 im_lib/src/main/java/com/anyun/im_lib/HeartbeatHandler.java                    |   52 ++++++++
 im_lib/src/main/java/com/anyun/im_lib/interf/IMSClientInteface.java            |    4 
 app/src/main/java/safeluck/drive/evaluation/im/MessageProcessor.java           |   12 ++
 app/src/main/java/safeluck/drive/evaluation/app.java                           |   36 +++++
 app/src/main/java/safeluck/drive/evaluation/MainActivity.java                  |   54 ++++++++
 app/src/main/java/safeluck/drive/evaluation/im/IMSEventListener.java           |   12 +
 app/src/main/java/safeluck/drive/evaluation/im/IMessageProcessor.java          |    2 
 im_lib/src/main/java/com/anyun/im_lib/IMSConfig.java                           |    2 
 im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java                |   64 ++++++++++
 im_lib/src/main/java/com/safeluck/aykj/message/BinMessageBase.java             |    3 
 app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java |   24 ++++
 app/src/main/java/safeluck/drive/evaluation/fragment/TcpFragment.java          |   37 +++++-
 app/src/main/java/safeluck/drive/evaluation/im/IMSClientBootstrap.java         |   11 +
 app/src/main/java/safeluck/drive/evaluation/platformMessage/JKMessage0206.java |    5 
 17 files changed, 303 insertions(+), 20 deletions(-)

diff --git a/app/src/main/java/safeluck/drive/evaluation/MainActivity.java b/app/src/main/java/safeluck/drive/evaluation/MainActivity.java
index 508ddea..4f9650c 100644
--- a/app/src/main/java/safeluck/drive/evaluation/MainActivity.java
+++ b/app/src/main/java/safeluck/drive/evaluation/MainActivity.java
@@ -8,6 +8,7 @@
 import android.os.AsyncTask;
 import android.os.Bundle;
 
+import android.text.TextUtils;
 import android.util.Log;
 import android.widget.Toast;
 
@@ -32,7 +33,9 @@
 import com.anyun.exam.lib.AYSdk;
 import com.anyun.exam.lib.MyLog;
 import com.anyun.exam.lib.util.ByteUtil;
+import com.anyun.im_lib.listener.IMSConnectStatusCallback;
 import com.google.gson.Gson;
+import com.safeluck.aykj.utils.BytesUtils;
 
 import org.json.JSONException;
 import org.json.JSONObject;
@@ -43,14 +46,19 @@
 import java.util.List;
 import java.util.concurrent.ArrayBlockingQueue;
 
+import safeluck.drive.evaluation.im.IMSClientBootstrap;
+import safeluck.drive.evaluation.im.MessageProcessor;
+import safeluck.drive.evaluation.platformMessage.JKMessage0100;
+import safeluck.drive.evaluation.platformMessage.JKMessage0101;
 import safeluck.drive.evaluation.util.CThreadPoolExecutor;
 import safeluck.drive.evaluation.util.FileUtil;
 import safeluck.drive.evaluation.util.PermissionManager;
+import safeluck.drive.evaluation.util.SPUtils;
 import safeluck.drive.evaluation.viewmodels.MainViewModel;
 import safeluck.drive.evaluation.viewmodels.RTKConnAndLogin;
 import safeluck.drive.evaluation.viewmodels.RTKConnAndLoginViewModel;
 
-public class MainActivity extends SupportActivity {
+public class MainActivity extends SupportActivity implements IMSConnectStatusCallback {
 
     private static final int PERMISSIONS_REQUEST_CODE = 1001;
     private String TAG = MainActivity.class.getCanonicalName();
@@ -61,6 +69,7 @@
     String[] PERMISSIONS = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA};
     RTKConfigViewModel rtkConfigViewModel;
     private boolean onlySendOnceRTKConfig = true;
+
 
     private ICEventListener icEventListener = new ICEventListener() {
         @Override
@@ -147,6 +156,12 @@
         //鍏ㄥ睆
 
         setContentView(R.layout.activity_main);
+        // TODO
+        //  杩涜tcp杩炴帴
+        String userId = "100002";
+        String token = "token_" + userId;
+        String hosts = "[{\"host\":\"192.168.31.77\", \"port\":12125}]";
+        IMSClientBootstrap.getInstance().init(userId,token,hosts,1,this);
 
         WokViewModel wokViewModel = ViewModelProviders.of(this).get(WokViewModel.class);
         wokViewModel.getStudents().observe(this, new Observer<List<Student>>() {
@@ -296,4 +311,41 @@
         return false;
     }
 
+    @Override
+    public void onConnecting() {
+        MyLog.i(TAG,"TCP onConnecting");
+    }
+
+    @Override
+    public void onConnected() {
+        MyLog.i(TAG,"TCP杩炴帴鎴愬姛");
+        //TODO 鍒ゆ柇SPUtils 鏄惁淇濆瓨鏈塪es瀵嗙爜锛涘鏋滄病鏈夊垯杩涜娉ㄥ唽JKMessage0100锛屽鏋滄湁瀵嗙爜鍒欒繘琛岄壌鏉僇KMessage0101
+        String hexPwd = (String) SPUtils.get(this,SPUtils.DES_HEX_PWD,"");
+        MessageProcessor.getInstance().addBeatHeart(10);
+        if (TextUtils.isEmpty(hexPwd)){
+
+            JKMessage0100 jkRegisterMessage = new JKMessage0100();
+            jkRegisterMessage.proviceid = 23;
+            jkRegisterMessage.cityid = 1;
+            jkRegisterMessage.imei = "460123874561";
+            jkRegisterMessage.model = "123";
+            jkRegisterMessage.sn = "0314200100000004";
+
+            Log.i(TAG, "onClick: msg len "+jkRegisterMessage.getMessageLen()+" "+       jkRegisterMessage.props.value);
+            byte[] str = jkRegisterMessage.toBytes();
+            MessageProcessor.getInstance().sendMessage(jkRegisterMessage);
+            Log.i(TAG, "onClick: "+ BytesUtils.bytesToHexString(str)+" ============");
+        }else{
+            JKMessage0101 jkMessage0101 = new JKMessage0101();
+            jkMessage0101.des =hexPwd;
+            jkMessage0101.timestamp = (int) System.currentTimeMillis();
+            MessageProcessor.getInstance().sendMessage(jkMessage0101);
+        }
+    }
+
+    @Override
+    public void onConnectFailed() {
+        MyLog.i(TAG,"TCP杩炴帴澶辫触");
+    }
+
 }
diff --git a/app/src/main/java/safeluck/drive/evaluation/app.java b/app/src/main/java/safeluck/drive/evaluation/app.java
index b026cf9..cc081dc 100644
--- a/app/src/main/java/safeluck/drive/evaluation/app.java
+++ b/app/src/main/java/safeluck/drive/evaluation/app.java
@@ -22,16 +22,19 @@
 import com.anyun.exam.lib.MyLog;
 import com.anyun.exam.lib.crash.CrashHandler;
 import com.anyun.im_lib.ExecutorServiceFactory;
+import com.anyun.im_lib.listener.IMSConnectStatusCallback;
 import com.facebook.stetho.Stetho;
 import com.google.gson.Gson;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonObject;
 import com.google.gson.JsonParser;
+import com.safeluck.aykj.utils.BytesUtils;
 
 
 import org.json.JSONException;
 import org.json.JSONObject;
 
+import java.util.Date;
 import java.util.Random;
 
 import safeluck.drive.evaluation.DB.WorkRoomDataBase;
@@ -45,7 +48,14 @@
 import safeluck.drive.evaluation.DB.rtktb.RTKWorkRepository;
 import safeluck.drive.evaluation.cEventCenter.CEvent;
 import safeluck.drive.evaluation.cEventCenter.CEventCenter;
+import safeluck.drive.evaluation.im.IMSClientBootstrap;
+import safeluck.drive.evaluation.im.IMSConnectStatusListener;
+import safeluck.drive.evaluation.im.MessageProcessor;
+import safeluck.drive.evaluation.platformMessage.JKMessage0100;
+import safeluck.drive.evaluation.platformMessage.JKMessage0101;
+import safeluck.drive.evaluation.platformMessage.JKMessage0203;
 import safeluck.drive.evaluation.util.FileUtil;
+import safeluck.drive.evaluation.util.SPUtils;
 import safeluck.drive.evaluation.util.SystemUtil;
 
 /**
@@ -54,7 +64,7 @@
  * 閭锛�632393724@qq.com
  * All Rights Saved! Chongqing AnYun Tech co. LTD
  */
-public class app extends Application implements IAYExamListener {
+public class app extends Application implements IAYExamListener  {
 
     private static final String TAG = "app";
     private Gson gson;
@@ -102,9 +112,8 @@
                 }
             }).start();
 
-            //TODO 杩涜tcp杩炴帴
 
-            //TODO 鍒ゆ柇SPUtils 鏄惁淇濆瓨鏈塪es瀵嗙爜锛涘鏋滄病鏈夊垯杩涜娉ㄥ唽JKMessage0100锛屽鏋滄湁瀵嗙爜鍒欒繘琛岄壌鏉僇KMessage0101
+
         }
 
     }
@@ -126,9 +135,17 @@
         MyLog.e(TAG, "OnTerminate()");
     }
 
+    private String lastStr;
     @Override
     public void callBackMsg(final int cmd, String json) {
-        MyLog.d(TAG, String.format("鏀跺埌鍛戒护[%d],Json鍐呭涓�%s", cmd, json));
+        String strConent = String.format("鏀跺埌鍛戒护[%d],Json鍐呭涓�%s", cmd, json);
+        if (strConent.equalsIgnoreCase(lastStr)){
+
+        }else{
+
+            MyLog.d(TAG,strConent );
+            lastStr = strConent;
+        }
         switch (cmd) {
             case Constant.NDK_START:
                 sendVechileInfo();
@@ -158,6 +175,15 @@
             case Constant.JUDGE_INFO:
 
                 if(!TextUtils.isEmpty(json)){
+                    JKMessage0203 jkMessage0203 = new JKMessage0203();
+                    jkMessage0203.phone = "0314200100000004";
+                    jkMessage0203.timeBCD = new Date();
+                    jkMessage0203.fail_item_id = 4;
+                    jkMessage0203.fail_score = 10;
+                    jkMessage0203.fail_reason = "鍙戝姩鏈哄惎鍔ㄥ悗锛屼笉鍙婃椂鏉惧紑鍚姩寮�鍏�";
+                    jkMessage0203.ID = "123456789";
+                    jkMessage0203.exam_id = 123456;
+                    MessageProcessor.getInstance().sendMessage(jkMessage0203);
                     JsonArray jsonArray = JsonParser.parseString(json).getAsJsonArray();
                     for (int i = 0; i < jsonArray.size(); i++) {
                         JsonObject jsonObject = jsonArray.get(i).getAsJsonObject();
@@ -272,4 +298,6 @@
         }).start();
 
     }
+
+
 }
diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java
index 702c122..eeb855a 100644
--- a/app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java
+++ b/app/src/main/java/safeluck/drive/evaluation/fragment/NetWorkTrainFragment.java
@@ -32,6 +32,7 @@
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.Date;
 import java.util.List;
 
 import me.yokeyword.fragmentation.SupportFragment;
@@ -50,6 +51,10 @@
 import safeluck.drive.evaluation.cEventCenter.ICEventListener;
 import safeluck.drive.evaluation.customview.ArrowView;
 import safeluck.drive.evaluation.customview.HouseView;
+import safeluck.drive.evaluation.im.MessageProcessor;
+import safeluck.drive.evaluation.platformMessage.JKMessage0201;
+import safeluck.drive.evaluation.platformMessage.JKMessage0202;
+import safeluck.drive.evaluation.platformMessage.JKMessage0204;
 
 /**
  * 鑱旂綉璁粌UI
@@ -298,6 +303,13 @@
                 sendExamJson(1);
                 iv_head.getDrawable().setLevel(1);
                 //TODO 鍙戦�丣KMessage0202 缁欏钩鍙帮紝寮�濮嬭�冭瘯
+                JKMessage0202 jkMessage0202 = new JKMessage0202();
+                jkMessage0202.phone = "0314200100000004";
+                jkMessage0202.timeBCD = new Date();
+                jkMessage0202.curr_exam = 1;
+                jkMessage0202.ID = "123456789";
+                jkMessage0202.exam_id = 123456;
+                MessageProcessor.getInstance().sendMessage(jkMessage0202);
                 break;
             case R.id.tv_stop:
                 Toast.makeText(_mActivity, "缁撴潫鑰冭瘯", Toast.LENGTH_SHORT).show();
@@ -317,6 +329,10 @@
             case R.id.profile:
                 MyLog.i(TAG,"绛惧埌锛岃幏鍙栬韩浠借瘉鐗╃悊鍗″彿");
                 //TODO 鑾峰緱鐗╃悊鍗″彿 鍙戦�丣KMessage0201缁欏钩鍙帮紝鑾峰彇濮撳悕銆佽韩浠借瘉銆乭ead_url
+                JKMessage0201 jkMessage0201 = new JKMessage0201();
+                jkMessage0201.currentExam = 1;
+                jkMessage0201.id = "123456789";
+                MessageProcessor.getInstance().sendMessage(jkMessage0201);
                 break;
         }
     }
@@ -343,6 +359,14 @@
         WorkManager.getInstance(_mActivity).enqueue(examStatusInitWork);
         sendExamJson(0);
         //TODO 鍙戦�丣KMessage0204缁欏钩鍙� 缁撴潫鑰冭瘯
+        JKMessage0204 jkMessage0204 = new JKMessage0204();
+        jkMessage0204.phone = "0314200100000004";
+        jkMessage0204.timeBCD = new Date();
+        jkMessage0204.score = 10;
+        jkMessage0204.stop = JKMessage0204.SUCC_STOP;
+        jkMessage0204.ID = "123456789";
+        jkMessage0204.exam_id = 123456;
+        MessageProcessor.getInstance().sendMessage(jkMessage0204);
     }
 
     private ICEventListener icEventListener = new ICEventListener() {
diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/TcpFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/TcpFragment.java
index 82a703a..b636ff8 100644
--- a/app/src/main/java/safeluck/drive/evaluation/fragment/TcpFragment.java
+++ b/app/src/main/java/safeluck/drive/evaluation/fragment/TcpFragment.java
@@ -17,6 +17,7 @@
 import androidx.lifecycle.Observer;
 
 import com.anyun.exam.lib.util.Speaker;
+import com.anyun.im_lib.listener.IMSConnectStatusCallback;
 import com.anyun.im_lib.util.ByteUtil;
 import com.google.android.material.textfield.TextInputEditText;
 import com.safeluck.aykj.utils.BytesUtils;
@@ -137,7 +138,22 @@
                 String hosts = "[{\"host\":\"47.93.157.103\", \"port\":2020}]";
 //                String hosts = "[{\"host\":\"192.168.31.77\", \"port\":12125}]";
 
-                IMSClientBootstrap.getInstance().init(userId,token,hosts,1);
+                IMSClientBootstrap.getInstance().init(userId, token, hosts, 1, new IMSConnectStatusCallback() {
+                    @Override
+                    public void onConnecting() {
+
+                    }
+
+                    @Override
+                    public void onConnected() {
+
+                    }
+
+                    @Override
+                    public void onConnectFailed() {
+
+                    }
+                });
                 break;
             case R.id.btn_send:
 //                if (connectThread != null){
@@ -243,12 +259,21 @@
                         "{\"utc\":\"20070101062157.00\",\"sat_num\":0,\"qf\":0,\"latitude\":0.0,\"longitude\":0.0,\"altitude\":-6378154.162,\"speed\":0.0}";
                 jkMessage0206.length = jkMessage0206.json.length();
                 AttachInfo attachInfo = new AttachInfo();
-                attachInfo.attach_message_id = 0x40;
-                attachInfo.attach_message_length = 18;
-                attachInfo.attach_data="12345678901";
+                attachInfo.attach_message_id = Integer.parseInt(port.getText().toString().trim());
+                attachInfo.attach_message_length = 4;
+                Log.i(TAG, "attachInfo.attach_message_id ="+attachInfo.attach_message_id );
+                if (attachInfo.attach_message_id == 0x41){
+                    Log.i(TAG, "onClick: 41");
+                    attachInfo.attach_data="00000000";
+                }else{
+
+                    //18涓瓧鑺� ascii
+                    attachInfo.attach_data="303030303030303030303030303030303030";
+                }
+
                 jkMessage0206.attachInfo = attachInfo;
                 Log.i(TAG, "浣嶇疆涓婃姤="+jkMessage0206.toString());
-
+                MessageProcessor.getInstance().sendMessage(jkMessage0206);
                 break;
             case R.id.btn_stop_exam:
                 JKMessage0204 jkMessage0204 = new JKMessage0204();
@@ -266,7 +291,7 @@
                     @Override
                     public void run() {
                         JKMessage0002 jkMessage0002 = new JKMessage0002();
-                        jkMessage0002.checksum = 0x7e;
+//                        jkMessage0002.checksum = 0x7e;
                         MessageProcessor.getInstance().sendMessage(jkMessage0002);
                         Log.i(TAG, "run: 5s涓�娆�");
                     }
diff --git a/app/src/main/java/safeluck/drive/evaluation/im/IMSClientBootstrap.java b/app/src/main/java/safeluck/drive/evaluation/im/IMSClientBootstrap.java
index a508360..fa0becf 100644
--- a/app/src/main/java/safeluck/drive/evaluation/im/IMSClientBootstrap.java
+++ b/app/src/main/java/safeluck/drive/evaluation/im/IMSClientBootstrap.java
@@ -3,6 +3,7 @@
 import android.util.Log;
 
 import com.anyun.im_lib.interf.IMSClientInteface;
+import com.anyun.im_lib.listener.IMSConnectStatusCallback;
 import com.google.gson.Gson;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonObject;
@@ -47,7 +48,7 @@
      * @param hosts
      * @param appStatus
      */
-    public synchronized void init(String userId,String token,String hosts,int appStatus){
+    public synchronized void init(String userId, String token, String hosts, int appStatus, IMSConnectStatusCallback imsConnectStatusListener){
         if (!isActive){
             Vector<String> serverUrlList = convertHosts(hosts);
             if (serverUrlList == null || serverUrlList.size() ==0){
@@ -62,7 +63,7 @@
             //鍒濆鍖朓MSClientInteface
             imsClient = IMSClientFactory.getIMSClient();
             updateAppStatus(appStatus);
-            imsClient.init(serverUrlList,new IMSEventListener(userId,token),new IMSConnectStatusListener());
+            imsClient.init(serverUrlList,new IMSEventListener(userId,token),imsConnectStatusListener);
         }
 
     }
@@ -106,4 +107,10 @@
             imsClient.sendMsg(message);
         }
     }
+
+    public void addHeartbeat(int seconds){
+        if (isActive){
+            imsClient.addHeartbeatHandler(seconds);
+        }
+    }
 }
diff --git a/app/src/main/java/safeluck/drive/evaluation/im/IMSEventListener.java b/app/src/main/java/safeluck/drive/evaluation/im/IMSEventListener.java
index 59bb12b..2874640 100644
--- a/app/src/main/java/safeluck/drive/evaluation/im/IMSEventListener.java
+++ b/app/src/main/java/safeluck/drive/evaluation/im/IMSEventListener.java
@@ -2,6 +2,9 @@
 
 import com.anyun.im_lib.listener.OnEventListener;
 
+import safeluck.drive.evaluation.platformMessage.JKMessage0002;
+import safeluck.drive.evaluation.platformMessage.utils.MessageEscaper;
+
 /**
  * MyApplication2
  * Created by lzw on 2019/12/12. 16:12:40
@@ -12,10 +15,11 @@
 
     private String userId;
     private String token;
-
+    private MessageEscaper messageEscaper;
     public IMSEventListener(String userId, String token) {
         this.userId = userId;
         this.token = token;
+        messageEscaper = new MessageEscaper();
     }
 
     @Override
@@ -71,4 +75,10 @@
     public byte[] getRegisterMessage() {
         return null;
     }
+
+    @Override
+    public byte[] getHearbeatMsg() {
+        JKMessage0002 jkMessage0002 = new JKMessage0002();
+        return messageEscaper.escape(jkMessage0002.toBytes());
+    }
 }
diff --git a/app/src/main/java/safeluck/drive/evaluation/im/IMessageProcessor.java b/app/src/main/java/safeluck/drive/evaluation/im/IMessageProcessor.java
index 7121a36..c685223 100644
--- a/app/src/main/java/safeluck/drive/evaluation/im/IMessageProcessor.java
+++ b/app/src/main/java/safeluck/drive/evaluation/im/IMessageProcessor.java
@@ -11,4 +11,6 @@
 public interface IMessageProcessor {
     void receiveMsg(byte[] message);
     void sendMessage(JK2019MessageBase msg);
+
+    void addBeatHeart(int seconds);
 }
diff --git a/app/src/main/java/safeluck/drive/evaluation/im/MessageProcessor.java b/app/src/main/java/safeluck/drive/evaluation/im/MessageProcessor.java
index cedcb9d..3cf3798 100644
--- a/app/src/main/java/safeluck/drive/evaluation/im/MessageProcessor.java
+++ b/app/src/main/java/safeluck/drive/evaluation/im/MessageProcessor.java
@@ -8,6 +8,7 @@
 import androidx.work.WorkManager;
 
 import com.anyun.exam.lib.MyLog;
+import com.anyun.im_lib.interf.IMSClientInteface;
 import com.anyun.im_lib.util.ByteUtil;
 import com.google.gson.Gson;
 import com.safeluck.aykj.utils.BytesUtils;
@@ -21,6 +22,7 @@
 import safeluck.drive.evaluation.platformMessage.JK2019MessageBase;
 import safeluck.drive.evaluation.platformMessage.JKMessage0001;
 import safeluck.drive.evaluation.platformMessage.JKMessage0100;
+import safeluck.drive.evaluation.platformMessage.JKMessage0101;
 import safeluck.drive.evaluation.platformMessage.JKMessage8001;
 import safeluck.drive.evaluation.platformMessage.JKMessage8100;
 import safeluck.drive.evaluation.platformMessage.JKMessage8201;
@@ -68,6 +70,9 @@
             if (((JKMessage8100) jk2019MessageBase).result == JKMessage8100.SUCCESS){
 
                 SPUtils.put(app.getAppContext(),SPUtils.DES_HEX_PWD,((JKMessage8100) jk2019MessageBase).des);
+                JKMessage0101 jkMessage0101 = new JKMessage0101();
+                jkMessage0101.des =((JKMessage8100) jk2019MessageBase).des;
+                jkMessage0101.timestamp = (int) System.currentTimeMillis();
             }
         }else if (jk2019MessageBase instanceof JKMessage8001){
             JKMessage8001 jkMessage8001 = (JKMessage8001) jk2019MessageBase;
@@ -101,4 +106,11 @@
             }
         });
     }
+
+    @Override
+    public void addBeatHeart(int seconds) {
+        if (IMSClientBootstrap.getInstance().isActive()){
+            IMSClientBootstrap.getInstance().addHeartbeat(seconds);
+        }
+    }
 }
diff --git a/app/src/main/java/safeluck/drive/evaluation/platformMessage/AttachInfo.java b/app/src/main/java/safeluck/drive/evaluation/platformMessage/AttachInfo.java
index ef0c3f5..67ea888 100644
--- a/app/src/main/java/safeluck/drive/evaluation/platformMessage/AttachInfo.java
+++ b/app/src/main/java/safeluck/drive/evaluation/platformMessage/AttachInfo.java
@@ -14,7 +14,7 @@
     @Int8
     public int attach_message_length;
     @Order(3)
-    @Length(lengthField="attach_message_length")
+    @Length(lengthField = "attach_message_length")
     @Hex
     public String attach_data;
 }
diff --git a/app/src/main/java/safeluck/drive/evaluation/platformMessage/JKMessage0206.java b/app/src/main/java/safeluck/drive/evaluation/platformMessage/JKMessage0206.java
index 8d8154b..a56e6ef 100644
--- a/app/src/main/java/safeluck/drive/evaluation/platformMessage/JKMessage0206.java
+++ b/app/src/main/java/safeluck/drive/evaluation/platformMessage/JKMessage0206.java
@@ -46,8 +46,11 @@
 
     @Order(12)
     @Message
-    @Length(20)
+    @Length(0)
     public AttachInfo attachInfo;
+
+
+
     /**
      * 鎶ヨ
      * DWORD
diff --git a/app/src/main/res/layout/layout_rtk_setting.xml b/app/src/main/res/layout/layout_rtk_setting.xml
index 4efa44a..ce6d041 100644
--- a/app/src/main/res/layout/layout_rtk_setting.xml
+++ b/app/src/main/res/layout/layout_rtk_setting.xml
@@ -149,6 +149,7 @@
             android:layout_width="0dp"
             android:layout_height="wrap_content"
             android:id="@+id/tv_rtk_model"
+            android:visibility="gone"
             android:text="@string/rtk_config_model"
             android:layout_weight="1"/>
         <TextView
diff --git a/im_lib/src/main/java/com/anyun/im_lib/HeartbeatHandler.java b/im_lib/src/main/java/com/anyun/im_lib/HeartbeatHandler.java
index a0e4314..75abb73 100644
--- a/im_lib/src/main/java/com/anyun/im_lib/HeartbeatHandler.java
+++ b/im_lib/src/main/java/com/anyun/im_lib/HeartbeatHandler.java
@@ -1,6 +1,13 @@
 package com.anyun.im_lib;
 
+import com.anyun.im_lib.netty.NettyTcpClient;
+import com.anyun.im_lib.util.MyLog;
+import com.safeluck.aykj.utils.BytesUtils;
+
+import io.netty.channel.ChannelHandlerContext;
 import io.netty.channel.ChannelInboundHandlerAdapter;
+import io.netty.handler.timeout.IdleState;
+import io.netty.handler.timeout.IdleStateEvent;
 
 /**
  * MyApplication2
@@ -9,4 +16,49 @@
  * All Rights Saved! Chongqing AnYun Tech co. LTD
  */
 public class HeartbeatHandler extends ChannelInboundHandlerAdapter  {
+    private NettyTcpClient imsClient;
+    public HeartbeatHandler(NettyTcpClient imsClient) {
+        this.imsClient = imsClient;
+    }
+    private HeartbeatTask heartbeatTask;
+    private class HeartbeatTask implements Runnable {
+
+        private ChannelHandlerContext ctx;
+
+        public HeartbeatTask(ChannelHandlerContext ctx) {
+            this.ctx = ctx;
+        }
+
+        @Override
+        public void run() {
+            if (ctx.channel().isActive()) {
+                byte []heartbeatMsg = imsClient.getHeartbeatMsg();
+                if (heartbeatMsg == null) {
+                    return;
+                }
+                MyLog.i("鍙戦�佸績璺虫秷鎭紝message=" +  BytesUtils.bytesToHexString(heartbeatMsg) + "褰撳墠蹇冭烦闂撮殧涓猴細" +imsClient.getHeartbeatInterval() + "ms\n");
+                imsClient.sendMsg(heartbeatMsg, false);
+            }
+        }
+    }
+    @Override
+    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
+        super.userEventTriggered(ctx, evt);
+        if (evt instanceof IdleStateEvent){
+            IdleState state = ((IdleStateEvent)evt).state();
+            switch (state){
+                case READER_IDLE:
+                    // 瑙勫畾鏃堕棿鍐呮病鏀跺埌鏈嶅姟绔績璺冲寘鍝嶅簲锛岃繘琛岄噸杩炴搷浣�
+                    break;
+                case WRITER_IDLE:
+                    // 瑙勫畾鏃堕棿鍐呮病鍚戞湇鍔$鍙戦�佸績璺冲寘锛屽嵆鍙戦�佷竴涓績璺冲寘
+                    if (heartbeatTask == null) {
+                        heartbeatTask = new HeartbeatTask(ctx);
+                    }
+                    imsClient.getLoopGroup().execWorkTask(heartbeatTask);
+                    break;
+
+            }
+        }
+    }
 }
diff --git a/im_lib/src/main/java/com/anyun/im_lib/IMSConfig.java b/im_lib/src/main/java/com/anyun/im_lib/IMSConfig.java
index 646ad15..4950e7a 100644
--- a/im_lib/src/main/java/com/anyun/im_lib/IMSConfig.java
+++ b/im_lib/src/main/java/com/anyun/im_lib/IMSConfig.java
@@ -10,7 +10,7 @@
     public static final int CONNECT_STATE_FAILURE = -1;
     public static final int DEFAULT_RECONNECT_BASE_DELAY_TIME = 3 * 1000;
     public static final int DEFAULT_CONNECT_TIMEOUT = 10 * 1000;
-    public static final int DEFAULT_HEARTBEAT_INTERVAL_FOREGROUND = 3 * 1000;
+    public static final int DEFAULT_HEARTBEAT_INTERVAL_FOREGROUND = 10 * 1000;
     public static final int DEFAULT_HEARTBEAT_INTERVAL_BACKGROUND = 30 * 1000;
 
     /*** 搴旂敤鍦ㄥ墠鍙版爣璇�***/
diff --git a/im_lib/src/main/java/com/anyun/im_lib/interf/IMSClientInteface.java b/im_lib/src/main/java/com/anyun/im_lib/interf/IMSClientInteface.java
index a50730d..2b55154 100644
--- a/im_lib/src/main/java/com/anyun/im_lib/interf/IMSClientInteface.java
+++ b/im_lib/src/main/java/com/anyun/im_lib/interf/IMSClientInteface.java
@@ -112,4 +112,8 @@
 
 //鑾峰彇娉ㄥ唽娑堟伅
     byte[] getRegisterMessage();
+
+    byte[] getHeartbeatMsg();
+
+    void addHeartbeatHandler(int seconds);
 }
diff --git a/im_lib/src/main/java/com/anyun/im_lib/listener/OnEventListener.java b/im_lib/src/main/java/com/anyun/im_lib/listener/OnEventListener.java
index ae61ce2..ccd7c2f 100644
--- a/im_lib/src/main/java/com/anyun/im_lib/listener/OnEventListener.java
+++ b/im_lib/src/main/java/com/anyun/im_lib/listener/OnEventListener.java
@@ -59,4 +59,6 @@
     int getReConnectInterval();
 //娉ㄥ唽娑堟伅
     byte[] getRegisterMessage();
+
+    byte[] getHearbeatMsg();
 }
diff --git a/im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java b/im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java
index ac26ebc..0c6112b 100644
--- a/im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java
+++ b/im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java
@@ -17,6 +17,7 @@
 
 import java.nio.ByteBuffer;
 import java.util.Vector;
+import java.util.concurrent.TimeUnit;
 import java.util.function.ToDoubleBiFunction;
 
 import io.netty.bootstrap.Bootstrap;
@@ -330,7 +331,7 @@
         // TODO: 2019/12/12  鏍规嵁MSG_ID 鏉ュ姞鍏� 瓒呮椂锛�  鏆備笉鍐�
 
         if (channel == null){
-            Log.i(TAG, "sendMsg fail,channel涓虹┖"+msg);
+            MyLog.i("PlatformMessage", "sendMsg fail,channel涓虹┖"+msg);
         }
         try {
             MyLog.i("PlatformMessage", "sendMsg: "+ BytesUtils.bytesToHexString(msg));
@@ -338,7 +339,7 @@
             byteBuf.writeBytes(msg);
             channel.writeAndFlush(byteBuf);
         } catch (Exception e) {
-            Log.i(TAG, "鍙戦�佹秷鎭け璐ワ紝reason="+e.getMessage()+"\t"+msg);
+            Log.i("PlatformMessage", "鍙戦�佹秷鎭け璐ワ紝reason="+e.getMessage()+"\t"+msg);
         }
     }
 
@@ -403,6 +404,34 @@
             return mOnEventListener.getRegisterMessage();
         }
         return null;
+    }
+
+    @Override
+    public byte[] getHeartbeatMsg() {
+        if (mOnEventListener != null){
+            return mOnEventListener.getHearbeatMsg();
+        }
+        return null;
+    }
+
+
+
+    /**
+     * 澧炲姞蹇冭烦锛�
+     * @param heartBeatInterval 绉�
+     */
+    @Override
+    public void addHeartbeatHandler(int heartBeatInterval){
+        this.heartBeatInterval = heartBeatInterval*1000;
+        _addHeartbeatHandler();
+    }
+
+    public int getHeartbeatInterval() {
+        return this.heartBeatInterval;
+    }
+
+    public ExecutorServiceFactory getLoopGroup() {
+        return loopGroup;
     }
 
 
@@ -522,6 +551,37 @@
     }
 
 
+    private void _addHeartbeatHandler(){
+        MyLog.i("add HeartbeatHandler");
+        if (channel == null || !channel.isActive() || channel.pipeline()==null){
+            MyLog.i("PlatformMessage","娣诲姞蹇冭烦handler澶辫触");
+            return;
+        }
+        try {
+            if(channel.pipeline().get(IdleStateHandler.class.getSimpleName()) != null){
+                MyLog.i("PlatformMessage","涔嬪墠瀛樺湪鐨勮鍐欒秴鏃秇andler锛屽厛绉婚櫎鎺夛紝鍐嶉噸鏂版坊鍔�");
+                channel.pipeline().remove(IdleStateHandler.class.getSimpleName());
+            }
+            // 3娆″績璺虫病鍝嶅簲锛屼唬琛ㄨ繛鎺ュ凡鏂紑
+            //璁惧畾IdleStateHandler蹇冭烦妫�娴嬫瘡鍥涚杩涜涓�娆″啓妫�娴嬶紝濡傛灉鍥涚鍐厀rite()鏂规硶鏈璋冪敤鍒欒Е鍙戜竴娆serEventTrigger()鏂规硶锛屽疄鐜板鎴风姣忓洓绉掑悜鏈嶅姟绔彂閫佷竴娆℃秷鎭紱
+            channel.pipeline().addFirst(IdleStateHandler.class.getSimpleName(), new IdleStateHandler(
+                    0, heartBeatInterval, 0, TimeUnit.MILLISECONDS));
+
+            // 閲嶆柊娣诲姞HeartbeatHandler
+            if (channel.pipeline().get(HeartbeatHandler.class.getSimpleName()) != null) {
+                channel.pipeline().remove(HeartbeatHandler.class.getSimpleName());
+            }
+            if (channel.pipeline().get(TCPReadHandler.class.getSimpleName()) != null) {
+                MyLog.i("涔嬪墠瀛樺湪鐨勫厛绉婚櫎鎺夛紝鍐嶉噸鏂版坊鍔燞eartbeatHandler");
+                channel.pipeline().addBefore(TCPReadHandler.class.getSimpleName(), HeartbeatHandler.class.getSimpleName(),
+                        new HeartbeatHandler(this));
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            MyLog.i("娣诲姞蹇冭烦娑堟伅绠$悊handler澶辫触锛宺eason锛�" + e.getMessage());
+        }
+    }
+
 
 
 }
diff --git a/im_lib/src/main/java/com/safeluck/aykj/message/BinMessageBase.java b/im_lib/src/main/java/com/safeluck/aykj/message/BinMessageBase.java
index 84be1d7..a363991 100644
--- a/im_lib/src/main/java/com/safeluck/aykj/message/BinMessageBase.java
+++ b/im_lib/src/main/java/com/safeluck/aykj/message/BinMessageBase.java
@@ -168,6 +168,7 @@
             try {
                 Object value = fieldDefine.field.get(this);
                 String hex = fieldDefine.coder.encode(value);
+//                Log.i("PlatformMessage", "FieldName: "+fieldDefine.field.getName()+" hex:"+hex);
                 if (hex == null) {
                     fieldDefine.relativeLengthField.set(this, 0);
                 } else {
@@ -210,7 +211,7 @@
                         hex = this.getPaddingLeftString(hex,fieldDefine.getFieldLen()*2, BytesUtils.toHexString(fieldDefine.length.paddingByte()));
                     }
                 }
-//                System.out.println(hex);
+//                Log.i("PlatformMessage value", "FieldName: "+fieldDefine.field.getName()+" hex:"+hex);
                 sb.append(hex);
             } catch (IllegalAccessException e) {
                 this.buildException(e.getMessage());

--
Gitblit v1.8.0