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