MQTT 解析文本时去掉不符合协议的单引号(服务器问题,设备做了适配)。
authorsnickersun <scy@incartech.cn>
Mon, 31 Aug 2020 15:05:47 +0000 (23:05 +0800)
committersnickersun <scy@incartech.cn>
Mon, 31 Aug 2020 15:05:47 +0000 (23:05 +0800)
mqtt 区域ID未取到,就不向服务器发送除了BREQ之外的消息。
mqtt 实现 deliver 发送成功判断。
mqtt 实现LGZONE时间查询设置。
mqtt 协议采用UTC时间

app/src/main/java/com/enqualcomm/support/service/Deliver.java
app/src/main/java/com/enqualcomm/support/utils/TimeUtil.java
app/src/main/java/com/ic/protocols/protocolAPIHelper.java
app/src/main/java/com/ic/protocols/protocol_fzd.java
app/src/main/java/com/ic/protocols/protocol_mqtt.java
app/src/main/java/com/ic/protocols/protocol_mqtt_client.java

index 7d641d6..fbcdac3 100644 (file)
@@ -338,11 +338,15 @@ public class Deliver extends AbstractConnectionService {
     this.mConnection = paramConnection;\r
     this.mRuntime = paramRuntime;\r
     String cmd = paramStringMessage.cmd();\r
-\r
+    if(Config.protocol_no==Config.PROTOCOL_MQTT)\r
+    {\r
+      cmd=protocolAPIHelper.isCmdStr(paramStringMessage);\r
+    }\r
     //如果需要检测是否响应。\r
     if (NeedCheckServerResponse==true){\r
 \r
       if(needCheckResponseCMD!=null) {\r
+        ICLogger.i("mqtt ====== checkSrvResponse cmd "+cmd+" msg "+protocolAPIHelper.isCmdStr (needCheckResponseCMD));\r
         if( cmd.equals(protocolAPIHelper.isCmdStr (needCheckResponseCMD))){\r
           ICLogger.i("checkSrvResponse "+cmd+" "+protocolAPIHelper.isCmdStr (needCheckResponseCMD)+" is responsed!");\r
           ServerResponsed=true;\r
index b9b45e3..ea0d71f 100644 (file)
@@ -60,7 +60,9 @@ public class TimeUtil {
 //    SimpleDateFormat df3 = new SimpleDateFormat("yyyyMMddHHmmss");\r
     Date date1 = null;\r
     try {\r
-      date1 = df1.parse(date+" "+time);\r
+      String dt=date+" "+time;\r
+      ICLogger.i("parseDatetiime " +dt);\r
+      date1 = df1.parse(dt);\r
       return date1;\r
     } catch (ParseException e) {\r
       e.printStackTrace();\r
index 3333efb..c1dfa7a 100644 (file)
@@ -73,7 +73,11 @@ public class protocolAPIHelper {
         return sm;\r
     }\r
 \r
-\r
+    /***\r
+     * its only used for message sending by mConnection.DeliverCMDMessageToSystem\r
+     * @param msg\r
+     * @return\r
+     */\r
     public static String isCmdStr(StringMessage msg){\r
         if(msg==null)\r
             ICLogger.i("isCmdStr StringMessage is null");\r
index 8c66631..fd3b1cd 100644 (file)
@@ -461,6 +461,19 @@ public class protocol_fzd {
     }\r
 \r
 \r
+    public static StringMessage AL(Runtime runtime){\r
+        /***\r
+         * [IC*334588000000156*00CD*AL,180916,064153,A,22.570512,N,113.8623267,E,0.00,154.8,0.0,11,10 0,100,0,0,00100018,7,0,460,1,9529,21809,155,9529,21242,132,9529,21405,131,9529,63554,131,9\r
+         * 529,63555,130,9529,63556,118,9529,21869,116,0,12.4]\r
+         * 平台回复:\r
+         * [IC*YYYYYYYYYYYYYYY*LEN*AL]\r
+         * 实例:[IC*334588000000156*0002*AL]\r
+         * 说明:终端产生警情后发送报警信息到平台,若终端没有收到回复,则定时上报直到收到报警确认为止.\r
+         */\r
+        return null;\r
+\r
+    }\r
+\r
     public static StringMessage UPLOAD(){\r
 \r
         return  genFZDCMD(cmdMap.get(CMD_TYPE.UPLOAD));\r
index 5a362d8..9d7d2dd 100644 (file)
@@ -49,7 +49,8 @@ public class protocol_mqtt {
         KA,         // 心跳连接\r
         LGZONE,     // 获取服务器端时间\r
         UD,         // 位置数据上报\r
-        AL,         // 报警数据上报\r
+        AL,         // 报警位置数据上报\r
+        ALARM,         //      报警数据上报\r
         temp,       // 上传体温数据\r
         heart,      // 终端心率上传\r
         blood,      // 上传血压数据\r
@@ -77,6 +78,7 @@ public class protocol_mqtt {
         cmdMap.put(CMD_TYPE.LGZONE, "LGZONE");\r
         cmdMap.put(CMD_TYPE.UD, "UD");\r
         cmdMap.put(CMD_TYPE.AL, "AL");\r
+        cmdMap.put(CMD_TYPE.AL, "ALARM");\r
         cmdMap.put(CMD_TYPE.temp, "temp");\r
         cmdMap.put(CMD_TYPE.heart, "heart");\r
         cmdMap.put(CMD_TYPE.blood, "blood");\r
@@ -130,10 +132,11 @@ public class protocol_mqtt {
         if (CoreService.getInstance() != null)\r
             imei = CoreService.getInstance().getRuntime().IMEI();\r
         String cmdtype = msg.cmd().replace(projName + "/" + protocolVersion + "/", "").replace("/" + imei, "");\r
-        ICLogger.i("mqtt isCmdStr topic " + msg.cmd() + " ,cmd " + cmdtype);\r
+//        ICLogger.i("mqtt isCmdStr topic " + msg.cmd() + " ,cmd " + cmdtype);\r
         for (CMD_TYPE key : cmdMap.keySet()) {\r
-            ICLogger.i("mqtt isCmdStr cmd " + msg.cmd() + " key " + cmdMap.get(key));\r
+//            ICLogger.i("mqtt isCmdStr cmd " + msg.cmd()+" " +cmdtype +" key " + cmdMap.get(key));\r
             if (cmdMap.get(key).equals(cmdtype)) {\r
+//                ICLogger.i("Find cmd "+cmdtype);\r
                 return cmdtype;\r
             }\r
         }\r
@@ -148,16 +151,22 @@ public class protocol_mqtt {
      */\r
     public boolean parserCmd(String cmdtype, byte[] bytes) {\r
         String cmd_msgbuf = new String(bytes);\r
-        log("bytes.size " + bytes.length);\r
-        cmdbuf.append(cmd_msgbuf);\r
-        log("cmdbuf.size " + cmdbuf.length() + " " + cmdbuf.toString());\r
-        cmd_msgbuf = cmd_msgbuf.replace(CMDHEADER, "").replace(CMDEND, "");\r
-        for (CMD_TYPE key : cmdMap.keySet()) {\r
-            if (cmdMap.get(key).toString().equals(cmdtype)) {\r
-                handleCmd(key, cmdtype, cmd_msgbuf);\r
-                return true;\r
+        log(cmdtype+" bytes.size " + bytes.length+" "+cmd_msgbuf);\r
+//        cmdbuf.append(cmd_msgbuf);\r
+//        log("cmdbuf.size " + cmdbuf.length() + " " + cmdbuf.toString());\r
+\r
+//        String[] cmdlist=cmdbuf.toString().split(CMDEND+CMDHEADER);\r
+\r
+//        for ( String cmditem : cmdlist ) {\r
+            cmd_msgbuf = cmd_msgbuf.replace(CMDHEADER, "").replace(CMDEND, "").replace("'","");\r
+            for (CMD_TYPE key : cmdMap.keySet()) {\r
+                if (cmdMap.get(key).toString().equals(cmdtype)) {\r
+                    handleCmd(key, cmdtype, cmd_msgbuf);\r
+                    return true;\r
+                }\r
             }\r
-        }\r
+//        }\r
+\r
         return false;\r
     }\r
 \r
@@ -185,7 +194,6 @@ public class protocol_mqtt {
                 .append("/").append(protocolVersion)\r
                 .append("/").append(cmdtype)\r
                 .append("/").append(imei);\r
-\r
         return genStringMessage(sbtopic.toString(), sb.toString());\r
     }\r
 \r
@@ -244,6 +252,9 @@ public class protocol_mqtt {
          * 平台发布的子主题为:KA\r
          * 回应的消息为:[LEN,KA]\r
          */\r
+        if(runtime.bleInfo.ble_area_id.isEmpty()){\r
+            return null;\r
+        }\r
         StringBuilder sb = new StringBuilder();\r
         String cmd = cmdMap.get(CMD_TYPE.KA);\r
         sb.append(TimeUtil.getUTCSystemDateYYMMDD()).append(CMDSPLIT)\r
@@ -287,7 +298,9 @@ public class protocol_mqtt {
          * 123456789,为区域id\r
          */\r
 \r
-\r
+        if(runtime.bleInfo.ble_area_id.isEmpty()){\r
+            return null;\r
+        }\r
         StringBuilder sb = new StringBuilder();\r
         String cmd = cmdMap.get(CMD_TYPE.UD);\r
         sb.append(TimeUtil.getUTCSystemDateYYMMDD()).append(CMDSPLIT)\r
@@ -332,6 +345,9 @@ public class protocol_mqtt {
          * 实例表示:东八区,上午8 点整\r
 \r
          */\r
+        if(runtime.bleInfo.ble_area_id.isEmpty()){\r
+            return null;\r
+        }\r
         StringBuilder sb = new StringBuilder();\r
         String cmd = cmdMap.get(CMD_TYPE.LGZONE);\r
         sb.append(runtime.bleInfo.ble_area_id);\r
@@ -362,11 +378,20 @@ public class protocol_mqtt {
      */\r
         String[] list=data.split(CMDSPLIT);\r
         if (list.length==4){\r
-            String timeZone=list[1];\r
-            String date=list[3];\r
-            String time=list[2];\r
+            String timeZone=list[1].trim();\r
+            String date=list[3].trim();\r
+            String time=list[2].trim();\r
             Date datetime= TimeUtil.parseDatetiime(date,time);\r
-            int timezone=Integer.parseInt(timeZone.replace("+",""));\r
+\r
+            int timezone;\r
+            try\r
+            {\r
+                timezone=Integer.parseInt(timeZone.replace("+","").trim());\r
+            }catch (Exception e){\r
+                ICLogger.e("timezone",e);\r
+                timezone=8;\r
+            }\r
+\r
             if (datetime!=null){\r
                 ICLogger.i("==="+timezone+" "+TimeUtil.getDefaultTimeZone());\r
                 TimeUtil.setTimeZone(timezone);\r
@@ -386,6 +411,30 @@ public class protocol_mqtt {
 \r
 \r
     }\r
+\r
+    public static StringMessage AL(Runtime runtime){\r
+/***\r
+ * 报警数据上报(AL)\r
+ * 终端发布(平台订阅):\r
+ * 终端向“WBG100/v1/AL/ID_手表IMEI”的主题发布   [LEN,位置数据(见附录一),区域id]\r
+ *\r
+ * 终端订阅(平台发布):\r
+ * 终端订阅“WBG100/v1/ID_手表IMEI/+”的主题列表,会收到平台的回应\r
+ * 平台发布的子主题为:AL\r
+ * 回应的消息为:[LEN, AL]\r
+ *\r
+ * 说明:终端产生警情后发送报警信息到平台,若终端没有收到回复,则定时上报直到收到报警确认为止.\r
+ */\r
+        if(runtime.bleInfo.ble_area_id.isEmpty()){\r
+            return null;\r
+        }\r
+        StringBuilder sb = new StringBuilder();\r
+        String cmd = cmdMap.get(CMD_TYPE.AL);\r
+        sb.append(runtime.bleInfo.ble_area_id);\r
+        return genMqttCMDMsg(cmd, sb.toString(), runtime.IMEI());\r
+\r
+    }\r
+\r
 //\r
 //    public static String UPLOAD(){\r
 //\r
@@ -504,8 +553,8 @@ public class protocol_mqtt {
 \r
         //普通非二进制命令用此函数处理\r
         boolean ret=true;\r
-        ICLogger.i("handleCmd "+type.name() + " strLen="+data.length());\r
-        if (Config.LOG_TOFILE)ICLogger.logToFile("APILog", " recv " + cmd +" "+ data);\r
+        ICLogger.i("mqtt handleCmd "+type.name() + " strLen="+data.length());\r
+        if (Config.LOG_TOFILE)ICLogger.logToFile("APILog", "mqtt recv " + cmd +" "+ data);\r
         switch (type){\r
 \r
             case KA:\r
@@ -519,6 +568,14 @@ public class protocol_mqtt {
                 ICLogger.i("服务器收到登录包BREQ");\r
                 mConnection.DeliverCMDMessageToSystem("login",cmd);//通知下面线程状态变化\r
                 break;\r
+            case LGZONE:\r
+                handleLGZONE(mConnection,mRuntime,data);\r
+                break;\r
+\r
+            case UD:\r
+                mConnection.DeliverCMDMessageToSystem("UD",cmd);//通知下面线程状态变化\r
+                break;\r
+\r
 //            case CR:\r
 //                //立即定位指令(长链接有效)\r
 //                handleCR(mConnection);\r
index 97c5464..9558662 100644 (file)
@@ -99,9 +99,10 @@ public class protocol_mqtt_client {
 \r
             isBound = true;\r
             isBinding = false;\r
-\r
+            ICLogger.i("OnBind");\r
             mClient.setHandler(mHandler);\r
 \r
+            attemptConnectMqtt();\r
         }\r
 \r
         @Override\r
@@ -149,7 +150,7 @@ public class protocol_mqtt_client {
 \r
     public void connectservice() {\r
         if (isBound) {\r
-            attemptConnectMqtt();\r
+//            attemptConnectMqtt();\r
         } else if (!isBound && !isBinding) {\r
             attemptBindService();\r
         }\r