From: snickersun Date: Mon, 31 Aug 2020 15:05:47 +0000 (+0800) Subject: MQTT 解析文本时去掉不符合协议的单引号(服务器问题,设备做了适配)。 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=05fe6ce3b6a2dea664caea660886ed63b45e65e7;p=protocol_srv.git MQTT 解析文本时去掉不符合协议的单引号(服务器问题,设备做了适配)。 mqtt 区域ID未取到,就不向服务器发送除了BREQ之外的消息。 mqtt 实现 deliver 发送成功判断。 mqtt 实现LGZONE时间查询设置。 mqtt 协议采用UTC时间 --- diff --git a/app/src/main/java/com/enqualcomm/support/service/Deliver.java b/app/src/main/java/com/enqualcomm/support/service/Deliver.java index 7d641d67..fbcdac3d 100644 --- a/app/src/main/java/com/enqualcomm/support/service/Deliver.java +++ b/app/src/main/java/com/enqualcomm/support/service/Deliver.java @@ -338,11 +338,15 @@ public class Deliver extends AbstractConnectionService { this.mConnection = paramConnection; this.mRuntime = paramRuntime; String cmd = paramStringMessage.cmd(); - + if(Config.protocol_no==Config.PROTOCOL_MQTT) + { + cmd=protocolAPIHelper.isCmdStr(paramStringMessage); + } //如果需要检测是否响应。 if (NeedCheckServerResponse==true){ if(needCheckResponseCMD!=null) { + ICLogger.i("mqtt ====== checkSrvResponse cmd "+cmd+" msg "+protocolAPIHelper.isCmdStr (needCheckResponseCMD)); if( cmd.equals(protocolAPIHelper.isCmdStr (needCheckResponseCMD))){ ICLogger.i("checkSrvResponse "+cmd+" "+protocolAPIHelper.isCmdStr (needCheckResponseCMD)+" is responsed!"); ServerResponsed=true; diff --git a/app/src/main/java/com/enqualcomm/support/utils/TimeUtil.java b/app/src/main/java/com/enqualcomm/support/utils/TimeUtil.java index b9b45e34..ea0d71f6 100644 --- a/app/src/main/java/com/enqualcomm/support/utils/TimeUtil.java +++ b/app/src/main/java/com/enqualcomm/support/utils/TimeUtil.java @@ -60,7 +60,9 @@ public class TimeUtil { // SimpleDateFormat df3 = new SimpleDateFormat("yyyyMMddHHmmss"); Date date1 = null; try { - date1 = df1.parse(date+" "+time); + String dt=date+" "+time; + ICLogger.i("parseDatetiime " +dt); + date1 = df1.parse(dt); return date1; } catch (ParseException e) { e.printStackTrace(); diff --git a/app/src/main/java/com/ic/protocols/protocolAPIHelper.java b/app/src/main/java/com/ic/protocols/protocolAPIHelper.java index 3333efbc..c1dfa7a1 100644 --- a/app/src/main/java/com/ic/protocols/protocolAPIHelper.java +++ b/app/src/main/java/com/ic/protocols/protocolAPIHelper.java @@ -73,7 +73,11 @@ public class protocolAPIHelper { return sm; } - + /*** + * its only used for message sending by mConnection.DeliverCMDMessageToSystem + * @param msg + * @return + */ public static String isCmdStr(StringMessage msg){ if(msg==null) ICLogger.i("isCmdStr StringMessage is null"); diff --git a/app/src/main/java/com/ic/protocols/protocol_fzd.java b/app/src/main/java/com/ic/protocols/protocol_fzd.java index 8c66631a..fd3b1cd8 100644 --- a/app/src/main/java/com/ic/protocols/protocol_fzd.java +++ b/app/src/main/java/com/ic/protocols/protocol_fzd.java @@ -461,6 +461,19 @@ public class protocol_fzd { } + public static StringMessage AL(Runtime runtime){ + /*** + * [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 + * 529,63555,130,9529,63556,118,9529,21869,116,0,12.4] + * 平台回复: + * [IC*YYYYYYYYYYYYYYY*LEN*AL] + * 实例:[IC*334588000000156*0002*AL] + * 说明:终端产生警情后发送报警信息到平台,若终端没有收到回复,则定时上报直到收到报警确认为止. + */ + return null; + + } + public static StringMessage UPLOAD(){ return genFZDCMD(cmdMap.get(CMD_TYPE.UPLOAD)); diff --git a/app/src/main/java/com/ic/protocols/protocol_mqtt.java b/app/src/main/java/com/ic/protocols/protocol_mqtt.java index 5a362d80..9d7d2dd0 100644 --- a/app/src/main/java/com/ic/protocols/protocol_mqtt.java +++ b/app/src/main/java/com/ic/protocols/protocol_mqtt.java @@ -49,7 +49,8 @@ public class protocol_mqtt { KA, // 心跳连接 LGZONE, // 获取服务器端时间 UD, // 位置数据上报 - AL, // 报警数据上报 + AL, // 报警位置数据上报 + ALARM, // 报警数据上报 temp, // 上传体温数据 heart, // 终端心率上传 blood, // 上传血压数据 @@ -77,6 +78,7 @@ public class protocol_mqtt { cmdMap.put(CMD_TYPE.LGZONE, "LGZONE"); cmdMap.put(CMD_TYPE.UD, "UD"); cmdMap.put(CMD_TYPE.AL, "AL"); + cmdMap.put(CMD_TYPE.AL, "ALARM"); cmdMap.put(CMD_TYPE.temp, "temp"); cmdMap.put(CMD_TYPE.heart, "heart"); cmdMap.put(CMD_TYPE.blood, "blood"); @@ -130,10 +132,11 @@ public class protocol_mqtt { if (CoreService.getInstance() != null) imei = CoreService.getInstance().getRuntime().IMEI(); String cmdtype = msg.cmd().replace(projName + "/" + protocolVersion + "/", "").replace("/" + imei, ""); - ICLogger.i("mqtt isCmdStr topic " + msg.cmd() + " ,cmd " + cmdtype); +// ICLogger.i("mqtt isCmdStr topic " + msg.cmd() + " ,cmd " + cmdtype); for (CMD_TYPE key : cmdMap.keySet()) { - ICLogger.i("mqtt isCmdStr cmd " + msg.cmd() + " key " + cmdMap.get(key)); +// ICLogger.i("mqtt isCmdStr cmd " + msg.cmd()+" " +cmdtype +" key " + cmdMap.get(key)); if (cmdMap.get(key).equals(cmdtype)) { +// ICLogger.i("Find cmd "+cmdtype); return cmdtype; } } @@ -148,16 +151,22 @@ public class protocol_mqtt { */ public boolean parserCmd(String cmdtype, byte[] bytes) { String cmd_msgbuf = new String(bytes); - log("bytes.size " + bytes.length); - cmdbuf.append(cmd_msgbuf); - log("cmdbuf.size " + cmdbuf.length() + " " + cmdbuf.toString()); - cmd_msgbuf = cmd_msgbuf.replace(CMDHEADER, "").replace(CMDEND, ""); - for (CMD_TYPE key : cmdMap.keySet()) { - if (cmdMap.get(key).toString().equals(cmdtype)) { - handleCmd(key, cmdtype, cmd_msgbuf); - return true; + log(cmdtype+" bytes.size " + bytes.length+" "+cmd_msgbuf); +// cmdbuf.append(cmd_msgbuf); +// log("cmdbuf.size " + cmdbuf.length() + " " + cmdbuf.toString()); + +// String[] cmdlist=cmdbuf.toString().split(CMDEND+CMDHEADER); + +// for ( String cmditem : cmdlist ) { + cmd_msgbuf = cmd_msgbuf.replace(CMDHEADER, "").replace(CMDEND, "").replace("'",""); + for (CMD_TYPE key : cmdMap.keySet()) { + if (cmdMap.get(key).toString().equals(cmdtype)) { + handleCmd(key, cmdtype, cmd_msgbuf); + return true; + } } - } +// } + return false; } @@ -185,7 +194,6 @@ public class protocol_mqtt { .append("/").append(protocolVersion) .append("/").append(cmdtype) .append("/").append(imei); - return genStringMessage(sbtopic.toString(), sb.toString()); } @@ -244,6 +252,9 @@ public class protocol_mqtt { * 平台发布的子主题为:KA * 回应的消息为:[LEN,KA] */ + if(runtime.bleInfo.ble_area_id.isEmpty()){ + return null; + } StringBuilder sb = new StringBuilder(); String cmd = cmdMap.get(CMD_TYPE.KA); sb.append(TimeUtil.getUTCSystemDateYYMMDD()).append(CMDSPLIT) @@ -287,7 +298,9 @@ public class protocol_mqtt { * 123456789,为区域id */ - + if(runtime.bleInfo.ble_area_id.isEmpty()){ + return null; + } StringBuilder sb = new StringBuilder(); String cmd = cmdMap.get(CMD_TYPE.UD); sb.append(TimeUtil.getUTCSystemDateYYMMDD()).append(CMDSPLIT) @@ -332,6 +345,9 @@ public class protocol_mqtt { * 实例表示:东八区,上午8 点整 */ + if(runtime.bleInfo.ble_area_id.isEmpty()){ + return null; + } StringBuilder sb = new StringBuilder(); String cmd = cmdMap.get(CMD_TYPE.LGZONE); sb.append(runtime.bleInfo.ble_area_id); @@ -362,11 +378,20 @@ public class protocol_mqtt { */ String[] list=data.split(CMDSPLIT); if (list.length==4){ - String timeZone=list[1]; - String date=list[3]; - String time=list[2]; + String timeZone=list[1].trim(); + String date=list[3].trim(); + String time=list[2].trim(); Date datetime= TimeUtil.parseDatetiime(date,time); - int timezone=Integer.parseInt(timeZone.replace("+","")); + + int timezone; + try + { + timezone=Integer.parseInt(timeZone.replace("+","").trim()); + }catch (Exception e){ + ICLogger.e("timezone",e); + timezone=8; + } + if (datetime!=null){ ICLogger.i("==="+timezone+" "+TimeUtil.getDefaultTimeZone()); TimeUtil.setTimeZone(timezone); @@ -386,6 +411,30 @@ public class protocol_mqtt { } + + public static StringMessage AL(Runtime runtime){ +/*** + * 报警数据上报(AL) + * 终端发布(平台订阅): + * 终端向“WBG100/v1/AL/ID_手表IMEI”的主题发布 [LEN,位置数据(见附录一),区域id] + * + * 终端订阅(平台发布): + * 终端订阅“WBG100/v1/ID_手表IMEI/+”的主题列表,会收到平台的回应 + * 平台发布的子主题为:AL + * 回应的消息为:[LEN, AL] + * + * 说明:终端产生警情后发送报警信息到平台,若终端没有收到回复,则定时上报直到收到报警确认为止. + */ + if(runtime.bleInfo.ble_area_id.isEmpty()){ + return null; + } + StringBuilder sb = new StringBuilder(); + String cmd = cmdMap.get(CMD_TYPE.AL); + sb.append(runtime.bleInfo.ble_area_id); + return genMqttCMDMsg(cmd, sb.toString(), runtime.IMEI()); + + } + // // public static String UPLOAD(){ // @@ -504,8 +553,8 @@ public class protocol_mqtt { //普通非二进制命令用此函数处理 boolean ret=true; - ICLogger.i("handleCmd "+type.name() + " strLen="+data.length()); - if (Config.LOG_TOFILE)ICLogger.logToFile("APILog", " recv " + cmd +" "+ data); + ICLogger.i("mqtt handleCmd "+type.name() + " strLen="+data.length()); + if (Config.LOG_TOFILE)ICLogger.logToFile("APILog", "mqtt recv " + cmd +" "+ data); switch (type){ case KA: @@ -519,6 +568,14 @@ public class protocol_mqtt { ICLogger.i("服务器收到登录包BREQ"); mConnection.DeliverCMDMessageToSystem("login",cmd);//通知下面线程状态变化 break; + case LGZONE: + handleLGZONE(mConnection,mRuntime,data); + break; + + case UD: + mConnection.DeliverCMDMessageToSystem("UD",cmd);//通知下面线程状态变化 + break; + // case CR: // //立即定位指令(长链接有效) // handleCR(mConnection); diff --git a/app/src/main/java/com/ic/protocols/protocol_mqtt_client.java b/app/src/main/java/com/ic/protocols/protocol_mqtt_client.java index 97c54643..9558662d 100644 --- a/app/src/main/java/com/ic/protocols/protocol_mqtt_client.java +++ b/app/src/main/java/com/ic/protocols/protocol_mqtt_client.java @@ -99,9 +99,10 @@ public class protocol_mqtt_client { isBound = true; isBinding = false; - + ICLogger.i("OnBind"); mClient.setHandler(mHandler); + attemptConnectMqtt(); } @Override @@ -149,7 +150,7 @@ public class protocol_mqtt_client { public void connectservice() { if (isBound) { - attemptConnectMqtt(); +// attemptConnectMqtt(); } else if (!isBound && !isBinding) { attemptBindService(); }