From cfd058531ac72f728028f141102ddb9743a8568f Mon Sep 17 00:00:00 2001
From: lizhanwei <Dana_Lee1016@126.com>
Date: 星期六, 14 三月 2020 21:31:03 +0800
Subject: [PATCH] 如果设备未登录则不发送心跳消息和位置消息等其他一切消息(不包括注册和鉴权消息);鉴权时间戳修改为秒,然后des加密进行发送;0206位置消息,再收到rtk_info的时候进行控制发送,如果移到MessageProcesser app崩溃,MessageManager.get()抛异常动态长度字段和依赖字段只能有一个,暂时先不改,后边有时间再改

---
 app/src/main/java/safeluck/drive/evaluation/app.java                            |   84 +++++++++++----------
 app/src/main/java/safeluck/drive/evaluation/MainActivity.java                   |   10 +-
 app/src/main/java/safeluck/drive/evaluation/im/IMSEventListener.java            |    5 +
 app/src/main/java/safeluck/drive/evaluation/DB/appstatusdb/AppStatusWorker.java |    3 
 app/src/main/java/safeluck/drive/evaluation/util/Utils.java                     |   63 +++++++++++++--
 im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java                 |    8 ++
 im_lib/src/main/java/com/anyun/im_lib/listener/OnEventListener.java             |    2 
 im_lib/src/main/java/com/anyun/im_lib/HeartbeatHandler.java                     |    9 +
 im_lib/src/main/java/com/anyun/im_lib/interf/IMSClientInteface.java             |    3 
 app/src/main/java/safeluck/drive/evaluation/im/MessageProcessor.java            |   35 +++++++-
 10 files changed, 158 insertions(+), 64 deletions(-)

diff --git a/app/src/main/java/safeluck/drive/evaluation/DB/appstatusdb/AppStatusWorker.java b/app/src/main/java/safeluck/drive/evaluation/DB/appstatusdb/AppStatusWorker.java
index a97efd0..342d72c 100644
--- a/app/src/main/java/safeluck/drive/evaluation/DB/appstatusdb/AppStatusWorker.java
+++ b/app/src/main/java/safeluck/drive/evaluation/DB/appstatusdb/AppStatusWorker.java
@@ -18,6 +18,7 @@
 
 import safeluck.drive.evaluation.Constant;
 import safeluck.drive.evaluation.DB.WorkRoomDataBase;
+import safeluck.drive.evaluation.platformMessage.PlatFormConstant;
 
 public class AppStatusWorker extends Worker {
 
@@ -35,7 +36,7 @@
     public Result doWork() {
         String[] str = getInputData().getStringArray(Constant.APP_STATUS);
         JSONObject jsonObject = null;
-        Log.i(TAG,"doWork:"+str[0]+": "+str[1]);
+        MyLog.i(PlatFormConstant.TAG,"AppStatusWorker:"+str[0]+": "+str[1]);
         try {
             jsonObject = new JSONObject(str[1]);
             switch (str[0]) {
diff --git a/app/src/main/java/safeluck/drive/evaluation/MainActivity.java b/app/src/main/java/safeluck/drive/evaluation/MainActivity.java
index b0dc214..f7124bb 100644
--- a/app/src/main/java/safeluck/drive/evaluation/MainActivity.java
+++ b/app/src/main/java/safeluck/drive/evaluation/MainActivity.java
@@ -368,12 +368,14 @@
             JKMessage0101 jkMessage0101 = new JKMessage0101();
             jkMessage0101.phone = ExamPlatformData.getInstance().getPhone();
             String des = hexPwd;
-            int time = (int) System.currentTimeMillis();
-            jkMessage0101.timestamp = time;
+            long time =  System.currentTimeMillis()/1000;
+            int unsignedInt = Utils.parseUnsignedInt(String.valueOf(time),10);
+            MyLog.i(String.format("鎬荤鏁�(long)=%d,瑁呮崲鎴恥nsigned int= %d",time,unsignedInt));
+            jkMessage0101.timestamp = unsignedInt;
 
 
-            byte[] miwen = Utils.encrypt(com.anyun.im_lib.util.ByteUtil.intGetBytes(time),des);
-            MyLog.i(PlatFormConstant.TAG,"閴存潈瀵嗘枃="+BytesUtils.bytesToHexString(miwen)+" time="+time);
+            byte[] miwen = Utils.encrypt(com.anyun.im_lib.util.ByteUtil.intGetBytes(unsignedInt),des);
+            MyLog.i(PlatFormConstant.TAG,"閴存潈瀵嗘枃="+BytesUtils.bytesToHexString(miwen)+" time="+unsignedInt);
             jkMessage0101.des = BytesUtils.bytesToHexString(miwen);
 
             MessageProcessor.getInstance().sendMessage(jkMessage0101);
diff --git a/app/src/main/java/safeluck/drive/evaluation/app.java b/app/src/main/java/safeluck/drive/evaluation/app.java
index 5929334..84e4574 100644
--- a/app/src/main/java/safeluck/drive/evaluation/app.java
+++ b/app/src/main/java/safeluck/drive/evaluation/app.java
@@ -306,49 +306,53 @@
                 CEventCenter.dispatchEvent(Constant.BIND_SPEED_TOPIC,cmd,0,json);
                 break;
             case Constant.RTK_INFO:
-                try {
-                    JSONObject jsSpeed = new JSONObject(json);
-                    double latitude = jsSpeed.getDouble("latitude");
-                    double longitude = jsSpeed.getDouble("longitude");
-                    double altitude = jsSpeed.getDouble("altitude");
-                    double speed = jsSpeed.getDouble("speed");
-                    int  qf = jsSpeed.getInt("qf");
-                    double track_ture = jsSpeed.getDouble("track_ture");
-                    String utc = jsSpeed.getString("utc");
-                    CEventCenter.dispatchEvent(Constant.BIND_RTK_SPEED_TOPIC,cmd,0,speed);
-                    utc = utc.replace(".","");
-                    JKMessage0206 jkMessage0206 = new JKMessage0206();
-                    jkMessage0206.phone = ExamPlatformData.getInstance().getPhone();
-                    jkMessage0206.alert = 0;
-                    jkMessage0206.status = 0;
-                    jkMessage0206.jd = longitude;
-                    jkMessage0206.wd = latitude;
-                    jkMessage0206.gaoCheng = (int)altitude;
-                    jkMessage0206.speed = speed;
-                    jkMessage0206.fangXiang = (int)track_ture;
-                    jkMessage0206.rf = qf;
-                    if (utc.length()>16){
-                        utc = utc.substring(0,16);
-                    }
-                    jkMessage0206.timeBCD = utc;
-                    jkMessage0206.json =json;
-                    jkMessage0206.length = jkMessage0206.json.length();
-                    AttachInfo attachInfo = new AttachInfo();
-                    attachInfo.attach_message_id = Integer.parseInt(String.valueOf(0x40));
-                    attachInfo.attach_message_length = 4;
-                    if (attachInfo.attach_message_id == 0x41){
-                        attachInfo.attach_data="00000000";
-                    }else{
+                if (ExamPlatformData.getInstance().getExamplatformStatus()==ExamPlatformData.DEV_LOGIN){
+                    try {
+                        JSONObject jsSpeed = new JSONObject(json);
+                        double latitude = jsSpeed.getDouble("latitude");
+                        double longitude = jsSpeed.getDouble("longitude");
+                        double altitude = jsSpeed.getDouble("altitude");
+                        double speed = jsSpeed.getDouble("speed");
+                        int  qf = jsSpeed.getInt("qf");
+                        double track_ture = jsSpeed.getDouble("track_ture");
+                        String utc = jsSpeed.getString("utc");
+                        CEventCenter.dispatchEvent(Constant.BIND_RTK_SPEED_TOPIC,cmd,0,speed);
+                        utc = utc.replace(".","");
+                        JKMessage0206 jkMessage0206 = new JKMessage0206();
+                        jkMessage0206.phone = ExamPlatformData.getInstance().getPhone();
+                        jkMessage0206.alert = 0;
+                        jkMessage0206.status = 0;
+                        jkMessage0206.jd = longitude;
+                        jkMessage0206.wd = latitude;
+                        jkMessage0206.gaoCheng = (int)altitude;
+                        jkMessage0206.speed = speed;
+                        jkMessage0206.fangXiang = (int)track_ture;
+                        jkMessage0206.rf = qf;
+                        if (utc.length()>16){
+                            utc = utc.substring(0,16);
+                        }
+                        jkMessage0206.timeBCD = utc;
+                        jkMessage0206.json =json;
+                        jkMessage0206.length = jkMessage0206.json.length();
+//                    MyLog.i("鍦扮悊鍧愭爣闀垮害="+jkMessage0206.length);
+                        AttachInfo attachInfo = new AttachInfo();
+                        attachInfo.attach_message_id = Integer.parseInt(String.valueOf(0x40));
+                        attachInfo.attach_message_length = 4;
+                        if (attachInfo.attach_message_id == 0x41){
+                            attachInfo.attach_data="00000000";
+                        }else{
 
-                        //18涓瓧鑺� ascii
-                        attachInfo.attach_data="303030303030303030303030303030303030";
+                            //18涓瓧鑺� ascii
+                            attachInfo.attach_data="303030303030303030303030303030303030";
+                        }
+
+                        jkMessage0206.attachInfo = attachInfo;
+                        MessageProcessor.getInstance().sendMessage(jkMessage0206);
+
+                    } catch (JSONException e) {
+                        e.printStackTrace();
                     }
 
-                    jkMessage0206.attachInfo = attachInfo;
-                    MessageProcessor.getInstance().sendMessage(jkMessage0206);
-
-                } catch (JSONException e) {
-                    e.printStackTrace();
                 }
 
                 break;
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 807de79..0e230c9 100644
--- a/app/src/main/java/safeluck/drive/evaluation/im/IMSEventListener.java
+++ b/app/src/main/java/safeluck/drive/evaluation/im/IMSEventListener.java
@@ -98,4 +98,9 @@
 
         return messageEscaper.escape(jkMessage0002.toBytes());
     }
+
+    @Override
+    public boolean isLogin() {
+        return ExamPlatformData.getInstance().getExamplatformStatus()==ExamPlatformData.DEV_LOGIN?true:false;
+    }
 }
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 7b6f11f..3b85264 100644
--- a/app/src/main/java/safeluck/drive/evaluation/im/MessageProcessor.java
+++ b/app/src/main/java/safeluck/drive/evaluation/im/MessageProcessor.java
@@ -75,10 +75,12 @@
                 SPUtils.put(app.getAppContext(),SPUtils.DES_HEX_PWD,des);
                 JKMessage0101 jkMessage0101 = new JKMessage0101();
 //                jkMessage0101.des =((JKMessage8100) jk2019MessageBase).des;
-                int time =(int) System.currentTimeMillis();
-                jkMessage0101.timestamp = time;
-                byte[] miwen =Utils.encrypt(ByteUtil.intGetBytes(time),des);
-                MyLog.i(PlatFormConstant.TAG,"閴存潈瀵嗘枃="+BytesUtils.bytesToHexString(miwen)+" time="+time);
+                long time =System.currentTimeMillis()/1000;
+                int unsignedInt = Utils.parseUnsignedInt(String.valueOf(time),10);
+                MyLog.i(String.format("鎬荤鏁�(long)=%d,瑁呮崲鎴恥nsigned int= %d",time,unsignedInt));
+                jkMessage0101.timestamp = unsignedInt;
+                byte[] miwen =Utils.encrypt(ByteUtil.intGetBytes(unsignedInt),des);
+                MyLog.i(PlatFormConstant.TAG,"閴存潈瀵嗘枃="+BytesUtils.bytesToHexString(miwen)+" time="+unsignedInt);
                 jkMessage0101.des = BytesUtils.bytesToHexString(miwen);
                 sendMessage(jkMessage0101);
                 ExamPlatformData.getInstance().setExamplatformStatus(ExamPlatformData.DEV_REGISTERED);
@@ -92,6 +94,7 @@
                 MyLog.i(PlatFormConstant.TAG,"閴存潈鎴愬姛");
                 ExamPlatformData.getInstance().setExamplatformStatus(ExamPlatformData.DEV_LOGIN);
             }else{
+                MyLog.i(PlatFormConstant.TAG,"鏀跺埌浜嗛壌鏉冩秷鎭紝浣嗛壌鏉冧笉鎴愬姛");
                 ExamPlatformData.getInstance().setExamplatformStatus(ExamPlatformData.DEV_NOT_LOGIN);
             }
         }else if (jk2019MessageBase instanceof JKMessage8201){
@@ -112,11 +115,29 @@
             @Override
             public void run() {
 
-                if (IMSClientBootstrap.getInstance().isActive()){
-                    IMSClientBootstrap.getInstance().sendMessage(messageEscaper.escape(msg.toBytes()));
+
+
+                if ( ExamPlatformData.getInstance().getExamplatformStatus() == ExamPlatformData.DEV_LOGIN){
+                    if (IMSClientBootstrap.getInstance().isActive()){
+                        IMSClientBootstrap.getInstance().sendMessage(messageEscaper.escape(msg.toBytes()));
+                    }else{
+                        Log.e(TAG, "run: 鍙戦�佹秷鎭け璐ワ紝鏈垵濮嬪寲杩炴帴NettyTcp");
+                    }
                 }else{
-                    Log.e(TAG, "run: 鍙戦�佹秷鎭け璐ワ紝鏈垵濮嬪寲杩炴帴NettyTcp");
+                    JK2019MessageBase jk2019MessageBase = MessageManager.get(msg.toString());
+                    if ((jk2019MessageBase instanceof JKMessage0100) || (jk2019MessageBase instanceof JKMessage0101)){
+
+                        if (IMSClientBootstrap.getInstance().isActive()){
+                            IMSClientBootstrap.getInstance().sendMessage(messageEscaper.escape(msg.toBytes()));
+                        }else{
+                            Log.e(TAG, "run: 鍙戦�佹秷鎭け璐ワ紝鏈垵濮嬪寲杩炴帴NettyTcp");
+                        }
+                    }else{
+                        MyLog.i(PlatFormConstant.TAG,"鐧诲綍鏈垚鍔燂紝涓嶈兘鍙戦�佹秷鎭�="+BytesUtils.bytesToHexString(ByteUtil.intGetBytes(jk2019MessageBase.messageId)));
+                    }
                 }
+
+
             }
         });
     }
diff --git a/app/src/main/java/safeluck/drive/evaluation/util/Utils.java b/app/src/main/java/safeluck/drive/evaluation/util/Utils.java
index 5a06340..689ee59 100644
--- a/app/src/main/java/safeluck/drive/evaluation/util/Utils.java
+++ b/app/src/main/java/safeluck/drive/evaluation/util/Utils.java
@@ -1,6 +1,7 @@
 package safeluck.drive.evaluation.util;
 
 import android.content.res.Resources;
+import android.os.SystemClock;
 import android.util.Log;
 import android.util.TypedValue;
 
@@ -115,16 +116,16 @@
         return str.matches(regx);
     }
 
-    public static void main(String []args){
-        String str   = "EB00020000031420010000000400A5";
-//        String str   = "7EEB00020000031420010000000400A5007E";
-        String str1  = "EB000200000314200100000004030D00";
-//        String str1  = "7EEB000200000314200100000004030D00D57E";
-        String str2  = "EB000200000314200100000004035000";
-        byte [] dtas=BytesUtils.hexStringToBytes(str);
-        byte checkcode = calCheckCode(dtas);
-        System.out.println(BytesUtils.toHexString(checkcode));
-    }
+//    public static void main(String []args){
+//        String str   = "EB00020000031420010000000400A5";
+////        String str   = "7EEB00020000031420010000000400A5007E";
+//        String str1  = "EB000200000314200100000004030D00";
+////        String str1  = "7EEB000200000314200100000004030D00D57E";
+//        String str2  = "EB000200000314200100000004035000";
+//        byte [] dtas=BytesUtils.hexStringToBytes(str);
+//        byte checkcode = calCheckCode(dtas);
+//        System.out.println(BytesUtils.toHexString(checkcode));
+//    }
 
 
 
@@ -271,4 +272,46 @@
         return cipher.doFinal(src);
     }
 
+    public static int parseUnsignedInt(String s, int radix)
+            throws NumberFormatException {
+        if (s == null)  {
+            throw new NumberFormatException("null");
+        }
+
+        int len = s.length();
+        if (len > 0) {
+            char firstChar = s.charAt(0);
+            if (firstChar == '-') {
+                throw new
+                        NumberFormatException(String.format("Illegal leading minus sign " +
+                        "on unsigned string %s.", s));
+            } else {
+                if (len <= 5 || // Integer.MAX_VALUE in Character.MAX_RADIX is 6 digits
+                        (radix == 10 && len <= 9) ) { // Integer.MAX_VALUE in base 10 is 10 digits
+                    return Integer.parseInt(s, radix);
+                } else {
+                    long ell = Long.parseLong(s, radix);
+                    if ((ell & 0xffff_ffff_0000_0000L) == 0) {
+                        return (int) ell;
+                    } else {
+                        throw new
+                                NumberFormatException(String.format("String value %s exceeds " +
+                                "range of unsigned int.", s));
+                    }
+                }
+            }
+        } else {
+            throw new NumberFormatException("For input string: \"" + s + "\"");
+        }
+    }
+
+    public static void main(String[] args){
+        long longCurrTIme = System.currentTimeMillis()/1000;
+        long CurrTIme =  System.currentTimeMillis();
+        System.out.println("longCurrTIme="+longCurrTIme);
+        System.out.println("intCurrTIme="+CurrTIme);
+        int unsignedTime=  parseUnsignedInt(String.valueOf(longCurrTIme),10);
+        System.out.println("unsigned int time = "+unsignedTime);
+    }
+
 }
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 75abb73..8d9fa1e 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
@@ -36,8 +36,13 @@
                 if (heartbeatMsg == null) {
                     return;
                 }
-                MyLog.i("鍙戦�佸績璺虫秷鎭紝message=" +  BytesUtils.bytesToHexString(heartbeatMsg) + "褰撳墠蹇冭烦闂撮殧涓猴細" +imsClient.getHeartbeatInterval() + "ms\n");
-                imsClient.sendMsg(heartbeatMsg, false);
+                if (imsClient.isLogin()){
+
+                    MyLog.i("鍙戦�佸績璺虫秷鎭紝message=" +  BytesUtils.bytesToHexString(heartbeatMsg) + "褰撳墠蹇冭烦闂撮殧涓猴細" +imsClient.getHeartbeatInterval() + "ms\n");
+                    imsClient.sendMsg(heartbeatMsg, false);
+                }else {
+                    MyLog.i("璁惧鐧诲綍鏈垚鍔熶笉鑳藉彂閫佸績璺虫秷鎭�");
+                }
             }
         }
     }
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 2b55154..697cd50 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
@@ -116,4 +116,7 @@
     byte[] getHeartbeatMsg();
 
     void addHeartbeatHandler(int seconds);
+
+    //璁惧鏄惁鐧诲綍锛屽彧鏈夌櫥褰�-true 鎵嶉渶瑕佸彂蹇冭烦娑堟伅
+    boolean isLogin();
 }
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 ccd7c2f..e716de2 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
@@ -61,4 +61,6 @@
     byte[] getRegisterMessage();
 
     byte[] getHearbeatMsg();
+
+    boolean isLogin();
 }
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 8c9d9d4..17ed3bf 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
@@ -428,6 +428,14 @@
         _addHeartbeatHandler();
     }
 
+    @Override
+    public boolean isLogin() {
+        if (mOnEventListener != null){
+            return mOnEventListener.isLogin();
+        }
+        return false;
+    }
+
     public int getHeartbeatInterval() {
         return this.heartBeatInterval;
     }

--
Gitblit v1.8.0