如果设备未登录则不发送心跳消息和位置消息等其他一切消息(不包括注册和鉴权消息);鉴权时间戳修改为秒,然后des加密进行发送;0206位置消息,再收到rtk_info的时候进行控制发送,如果移到MessageProcesser app崩溃,MessageManager.get()抛异常动态长度字段和依赖字段只能有一个,暂时先不改,后边有时间再改
10个文件已修改
222 ■■■■ 已修改文件
app/src/main/java/safeluck/drive/evaluation/DB/appstatusdb/AppStatusWorker.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/MainActivity.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/app.java 84 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/im/IMSEventListener.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/im/MessageProcessor.java 35 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/safeluck/drive/evaluation/util/Utils.java 63 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
im_lib/src/main/java/com/anyun/im_lib/HeartbeatHandler.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
im_lib/src/main/java/com/anyun/im_lib/interf/IMSClientInteface.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
im_lib/src/main/java/com/anyun/im_lib/listener/OnEventListener.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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]) {
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,装换成unsigned 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);
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;
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;
    }
}
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,装换成unsigned 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)));
                    }
                }
            }
        });
    }
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);
    }
}
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("设备登录未成功不能发送心跳消息");
                }
            }
        }
    }
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();
}
im_lib/src/main/java/com/anyun/im_lib/listener/OnEventListener.java
@@ -61,4 +61,6 @@
    byte[] getRegisterMessage();
    byte[] getHearbeatMsg();
    boolean isLogin();
}
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;
    }