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