\r
public class protocol_mqtt {\r
private static final String TAG = "ICSrv." + protocol_mqtt.class.getSimpleName();\r
- private static final String PrivKEY = "XMQcHi0lGIdru6xzW7lygBwBT8N0c09P";\r
private static final String CMDHEADER = "[";\r
private static final String CMDCOMPANY="IC";\r
private static final String CMDEND = "]";\r
private static final String CMDHEADERSPLIT = "*";\r
private static final String CMDSPLIT = ",";\r
\r
- public static final String defaultServerIP="api.xcloudtech.com";\r
- public static final int defaultServerPort=9000;\r
+ public static final String defaultServerIP="47.106.237.76";\r
+ public static final int defaultServerPort=1883;\r
\r
+ public static final String projName="WBG100";\r
+ public static final String protocolVersion="v1";\r
+ public static final String mqttKey="QWER15WTF156OQRT1230";\r
public enum CMD_TYPE {\r
- /*终端发起*/\r
- //链路保持数据\r
- LK,//登录\r
- PING,//绑定查询\r
- KA,//心跳包\r
- UD,//位置上传\r
- UD2,//盲点位置上传\r
- AL,//报警数据上传\r
- Time,//获取服务器时间\r
- WT,//获取天气\r
- img,//上传图片\r
- VOICE,//上传语音\r
- WG,//请求位置信息\r
- DLT,//解绑\r
- temp,//体温上传\r
- /* 服务器发起*/\r
- UPLOAD,//数据上传间隔设置\r
- CENTER,//中心号码设置\r
- CALL, //拨打电话\r
- MONITOR,//监听\r
- SOS,//SOS 号码设置\r
- FACTORY,//恢复出厂设置\r
- SOSSMS,//SOS 短信报警开关\r
- LOWBAT,//低电短信报警开关\r
- VERNO,//版本查询\r
- CR,//定位指令\r
- POWEROFF,//关机指令\r
- REMOVE,//取下手环报警开关\r
- REMOVESMS,//取下手表短信报警开关\r
- PEDO,//计步功能开关\r
- SILENCETIME,//免打扰时间段设置\r
- SILENCETIME2, //免打扰时间段设置\r
- SLEEPTIME,//翻转检测时间段设置\r
- FIND,//找手表指令\r
- REMIND,//闹钟设置指令\r
- TK,//对讲功能(微聊发送语音)\r
- PHL,//设置电话本+白名单(最多 50 条)\r
- wdstart,//远程测温\r
- bldstart,//远程测血压\r
- hrtstart,//远程测量心率\r
- BOOTOFF,//定时关机\r
- oxygen,//血氧上传\r
- blood,//血压上传\r
- heart,//心率上传\r
+ // cmd_type 含义\r
+ // 终端主动上传\r
+ BREQ, // 手表请求绑定(新增)\r
+ KA, // 心跳连接\r
+ LGZONE, // 获取服务器端时间\r
+ UD, // 位置数据上报\r
+ AL, // 报警数据上报\r
+ temp, // 上传体温数据\r
+ heart, // 终端心率上传\r
+ blood, // 上传血压数据\r
+ oxygen, // 上传血氧数据\r
+ // 平台主动下发\r
+ UPLOAD, // 数据上传间隔设置\r
+ hrtstart, // 设置心率、血氧、血压上传频率\r
+ wdstart, // 设置体温上传频率\r
+ CENTER, // 中心号码设置\r
+ MONITOR, // 监听\r
+ SOS, // 设置SOS 号码\r
+ FACTORY, // 恢复出厂设置\r
+ REMOVE, // 取下手环报警开关\r
+ PEDO, // 计步功能开关\r
+ MSGDOWN, // 消息下发到指定手表(新增)\r
UNKNOWN_CMD,\r
}\r
\r
\r
static {\r
cmdMap = new HashMap<CMD_TYPE, String>();\r
- cmdMap.put(CMD_TYPE.LK, "LK");\r
- cmdMap.put(CMD_TYPE.PING, "PING");\r
+ cmdMap.put(CMD_TYPE.BREQ, "BREQ");\r
cmdMap.put(CMD_TYPE.KA, "KA");\r
+ cmdMap.put(CMD_TYPE.LGZONE, "LGZONE");\r
cmdMap.put(CMD_TYPE.UD, "UD");\r
- cmdMap.put(CMD_TYPE.UD2, "UD2");\r
cmdMap.put(CMD_TYPE.AL, "AL");\r
- cmdMap.put(CMD_TYPE.Time, "Time");\r
- cmdMap.put(CMD_TYPE.WT, "WT");\r
- cmdMap.put(CMD_TYPE.img, "img");\r
- cmdMap.put(CMD_TYPE.VOICE, "VOICE");\r
- cmdMap.put(CMD_TYPE.WG, "WG");\r
- cmdMap.put(CMD_TYPE.DLT, "DLT");\r
cmdMap.put(CMD_TYPE.temp, "temp");\r
+ cmdMap.put(CMD_TYPE.heart, "heart");\r
+ cmdMap.put(CMD_TYPE.blood, "blood");\r
+ cmdMap.put(CMD_TYPE.oxygen, "oxygen");\r
+ //下发\r
cmdMap.put(CMD_TYPE.UPLOAD, "UPLOAD");\r
+ cmdMap.put(CMD_TYPE.hrtstart, "hrtstart");\r
+ cmdMap.put(CMD_TYPE.wdstart, "wdstart");\r
cmdMap.put(CMD_TYPE.CENTER, "CENTER");\r
- cmdMap.put(CMD_TYPE.CALL, "CALL");\r
cmdMap.put(CMD_TYPE.MONITOR, "MONITOR");\r
cmdMap.put(CMD_TYPE.SOS, "SOS");\r
cmdMap.put(CMD_TYPE.FACTORY, "FACTORY");\r
- cmdMap.put(CMD_TYPE.SOSSMS, "SOSSMS");\r
- cmdMap.put(CMD_TYPE.LOWBAT, "LOWBAT");\r
- cmdMap.put(CMD_TYPE.VERNO, "VERNO");\r
- cmdMap.put(CMD_TYPE.CR, "CR");\r
- cmdMap.put(CMD_TYPE.POWEROFF, "POWEROFF");\r
cmdMap.put(CMD_TYPE.REMOVE, "REMOVE");\r
- cmdMap.put(CMD_TYPE.REMOVESMS, "REMOVESMS");\r
cmdMap.put(CMD_TYPE.PEDO, "PEDO");\r
- cmdMap.put(CMD_TYPE.SILENCETIME, "SILENCETIME");\r
- cmdMap.put(CMD_TYPE.SILENCETIME2, "SILENCETIME2");\r
- cmdMap.put(CMD_TYPE.SLEEPTIME, "SLEEPTIME");\r
- cmdMap.put(CMD_TYPE.FIND, "FIND");\r
- cmdMap.put(CMD_TYPE.REMIND, "REMIND");\r
- cmdMap.put(CMD_TYPE.TK, "TK");\r
- cmdMap.put(CMD_TYPE.PHL, "PHL");\r
- cmdMap.put(CMD_TYPE.wdstart, "wdstart");\r
- cmdMap.put(CMD_TYPE.bldstart, "bldstart");\r
- cmdMap.put(CMD_TYPE.hrtstart, "hrtstart");\r
- cmdMap.put(CMD_TYPE.BOOTOFF, "BOOTOFF");\r
- cmdMap.put(CMD_TYPE.oxygen, "oxygen");\r
- cmdMap.put(CMD_TYPE.blood, "blood");\r
- cmdMap.put(CMD_TYPE.heart, "heart");\r
+ cmdMap.put(CMD_TYPE.MSGDOWN, "MSGDOWN");\r
+\r
}\r
\r
private NettyConnection mConnection=null;\r
\r
private StringBuffer cmdbuf = new StringBuffer();\r
\r
-// /*\r
-// 输入的字符串,如果有完整命令,返回 true\r
-// 否则返回 false\r
-// */\r
-// public boolean isCmdStr(String msg) {\r
-// /***\r
-// * IC*334588000000156*LEN*FALLDOWN\r
-// */\r
-// String cmd;\r
-// int index=msg.indexOf(CMDSPLIT);\r
-// if (index > 0){\r
-// cmd = msg.substring(0,index);\r
-// }else{\r
-// cmd = msg;\r
-// }\r
-// if (regexUtil.isFZDCMD(cmd) ) {\r
-// return true;\r
-// }\r
-// return false;\r
-// }\r
\r
private void log(String msg) {\r
ICLogger.log(TAG, msg);\r
\r
private static String keyheader(String cmd,int len){\r
String header=genHeader(len,cmd);\r
- String key= MD5.getCMDStringMD5(header+PrivKEY);\r
+ String key= MD5.getCMDStringMD5(header);\r
return key;\r
}\r
\r
sb.append(CMDHEADER).append(keyheader).append(header).append(CMDSPLIT).append(data).append(CMDEND);\r
return sb.toString();\r
}\r
- /*登录*/\r
- public static String LK() {\r
- /*IC*YYYYYYYYYYYYYYY*LEN*LK*/\r
- return genFZDCMD(cmdMap.get(CMD_TYPE.LK));\r
- }\r
+\r
\r
/**\r
* 绑定\r
* */\r
- public static String PING(){\r
+ public static String BREQ(){\r
// IC*YYYYYYYYYYYYYYY*LEN*PING\r
- return genFZDCMD(cmdMap.get(CMD_TYPE.PING));\r
+ return genFZDCMD(cmdMap.get(CMD_TYPE.BREQ));\r
}\r
\r
\r
- public static void handlePing(Runtime runtime,String data){\r
+ public static void handleBREQ(Runtime runtime,String data){\r
// [IC*YYYYYYYYYYYYYYY*LEN*PING,是否绑定(0 表示未绑定,1 表示绑定)]\r
// 实例:[IC*334588000000156*0006*PING,0]或[IC*334588000000156*0006*PING,1]\r
int bind=Integer.parseInt(data);\r
}\r
\r
\r
- /*LBS+WiFi混合定位*/\r
- public static String UD2(Runtime ds) {\r
- //示例数据:IWAP02,\r
- // zh_cn,\r
- // 0,\r
- // 7,\r
- // 460,0,\r
- // 9520|3671|13,9520|3672|12,9520|3673|11,9520|3674|10,9520|3675|9,9520|3676|8,9520|3677|7,\r
- // 4,\r
- // 1|D8-24-BD-79-FA-1F|59&2|3C-46-D8-6D-CE-01|81&3|0C-4C-39-1A-7C-65|69&4|70-A8-E3-5D-D7-C0|65#\r
-// IW标识符\r
-// AP02:命令字\r
-// zh_cn: 语言标志\r
-// 0:回复标识,为0时不回复地址,为 1 时,服务器回复地址信息\r
-// 7: 表示共有7组基站\r
-// 460: MCC 国家码\r
-// 0: MNC运营商代码\r
-// 9520|3671|10: LAC|CID|dbm表示一组基站信息,后面数量需和基站组数地应 10:dbm为信号强度多基站信号强度建议从高到低排列后上传,信号强度转正数:150 – abs(dbm)\r
-// 4: 表示WIFI组数,\r
-// 1|D8-24-BD-79-FA-1F|59: ssid|mac地址|信号强度,信号强度转正数:150 – abs(信号强度)\r
-\r
- int apsum=0;\r
- String wifiinfo=ds.getWifiInfo();\r
- if (!wifiinfo.isEmpty()) {\r
- String[] list = wifiinfo.split("&");\r
- apsum = list.length;\r
- }\r
-\r
- ICLogger.i("Wifi ap sum "+apsum);\r
- return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.LK)).append(CMDSPLIT)\r
- .append(ds.getLanguage()).append(CMDSPLIT)\r
- .append(0).append(CMDSPLIT) //为0时不回复地址\r
- .append(ds.getLBSMultiStationData()).append(CMDSPLIT) //基站信息数据\r
- .append(apsum).append(CMDSPLIT).append(ds.getWifiInfo()).append(CMDEND).toString(); //wifi信息数据\r
- }\r
-\r
//处理 定位 BP01\r
public void handleUD2(String cmd){\r
log("BP02定位接收成功");\r
public static String temp(double temp){\r
return genFZDCMD(cmdMap.get(CMD_TYPE.temp),String.format("%.1f",temp));\r
}\r
- public static String POWEROFF(){\r
- return genFZDCMD(cmdMap.get(CMD_TYPE.POWEROFF));\r
- }\r
- public void handlePOWEROFF(Connection connection) {\r
-\r
- connection.send(genStringMessage("POWEROFF",POWEROFF()));\r
- }\r
- public static String CR(){\r
- return genFZDCMD(cmdMap.get(CMD_TYPE.CR));\r
- }\r
- public void handleCR(Connection connection) {\r
\r
- connection.send(genStringMessage("CR",CR()));\r
- }\r
- public static String bldstart(){\r
- return genFZDCMD(cmdMap.get(CMD_TYPE.bldstart));\r
- }\r
- public void handleBldstart(Connection connection) {\r
-\r
- connection.send(genStringMessage("bldstart",bldstart()));\r
- }\r
public static String wdstart(){\r
return genFZDCMD(cmdMap.get(CMD_TYPE.wdstart));\r
}\r
\r
connection.send(genStringMessage("hrtstart",hrtstart()));\r
}\r
- public static String FIND(){\r
- return genFZDCMD(cmdMap.get(CMD_TYPE.FIND));\r
- }\r
- public void handleFIND(Connection connection) {\r
\r
- connection.send(genStringMessage("FIND",FIND()));\r
- }\r
public static String SOS(){\r
return genFZDCMD(cmdMap.get(CMD_TYPE.SOS));\r
}\r
\r
\r
}\r
- public static String PHL(){\r
- return genFZDCMD(cmdMap.get(CMD_TYPE.PHL));\r
- }\r
-\r
- public void handlePHL(Connection connection,Runtime runtime,String cmd,String data){\r
- /***\r
- * [IC*334588000000156*len*PHL,号码,名字,号码,名字,号码,名字,号码,名字,号码,名字] len:发送长度 16 进制表示 占用 2 个字节\r
- * 号码:ascii 字符 名字:Unicode 编码\r
- * 该接口融合了白名单和电话本的功能,最多对应 50 组号码与名字,号码不超过 20 个 ascii 字符, 姓名不超过 10 个 Unicode 字符。\r
- * 示 例 : [IC*334588000000156*0010*PHL,110,5F204E09]\r
- * 5F204E09--->张三,是使用 unicode 编码\r
- * 终端回复:[IC*334588000000156*0003*PHL]\r
- */\r
-\r
- String list[]=data.split(CMDSPLIT);\r
- int listlen=list.length;\r
- boolean ispared= (( listlen >0) && (listlen%2 == 0));\r
- if (ispared){\r
- ArrayList<Contact> contactArray=new ArrayList<Contact>();\r
- for(int i=0; i<listlen;i+=2){\r
- String phonem=list[i];\r
- String name = Util.decodeUnicode2Utf8(list[i+1]);\r
- ICLogger.i(i/2 +" 姓名 "+name+", 电话 "+phonem);\r
- contactArray.add(new Contact(Contact.CATEGORY_CALL,name,phonem));\r
- }\r
-// contactArray.add(new Contact(Contact.CATEGORY_GROUP,"All","666"));\r
-// contactArray.add(new Contact(Contact.CATEGORY_PARTNER,"PARTNER","666"));\r
-// contactArray.add(new Contact(Contact.CATEGORY_CARE,"CARE","666"));\r
-// contactArray.add(new Contact(Contact.CATEGORY_VOLTE,"VOLTE","666"));\r
-\r
- runtime.getDbHelper().saveContacts(contactArray,false,false,true,false,false,false);\r
- }else{\r
- ICLogger.i("没有电话本!执行清除操作!");\r
- }\r
- connection.send(genStringMessage("PHL",PHL()));\r
- }\r
\r
public void sendBroadcast(String cmd, Runtime dev) {\r
\r
ICLogger.i("handleCmd "+type.name() + " strLen="+data.length());\r
if (Config.LOG_TOFILE)ICLogger.logToFile("APILog", " recv " + cmd +" "+ data);\r
switch (type){\r
- case LK: //登录包\r
- ICLogger.i("服务器收到登录包LK");\r
- mConnection.DeliverCMDMessageToSystem("login",cmd);//通知下面线程状态变化\r
- break;\r
+\r
case KA:\r
ICLogger.i("服务器收到心跳包KA");\r
mConnection.DeliverCMDMessageToSystem("heartbeat",cmd);//通知下面线程状态变化\r
break;\r
\r
- case PING:\r
- handlePing(mRuntime,data);\r
+ case BREQ:\r
+ handleBREQ(mRuntime,data);\r
ICLogger.i("服务器返回Ping绑定信息");\r
break;\r
- case CR:\r
- //立即定位指令(长链接有效)\r
- handleCR(mConnection);\r
- mConnection.DeliverCMDMessageToSystem("StartLocate",cmd);//通知下面线程状态变化\r
- break;\r
+// case CR:\r
+// //立即定位指令(长链接有效)\r
+// handleCR(mConnection);\r
+// mConnection.DeliverCMDMessageToSystem("StartLocate",cmd);//通知下面线程状态变化\r
+// break;\r
\r
// case BP07:\r
// //收到发送的语音包\r
handleSOS(mConnection,mRuntime,cmd,data);\r
ICLogger.i("收到服务器设置SOS号码命令BP12");\r
break;\r
- case PHL:\r
- //收到设置白名单号码\r
- ICLogger.i("收到服务器设置白名单号码命令BP14");\r
- handlePHL(mConnection,mRuntime,cmd,data);\r
- break;\r
+// case PHL:\r
+// //收到设置白名单号码\r
+// ICLogger.i("收到服务器设置白名单号码命令BP14");\r
+// handlePHL(mConnection,mRuntime,cmd,data);\r
+// break;\r
// case BP15:\r
// handleBP15(cmd,mConnection,mRuntime);\r
// ICLogger.i("收到服务器设置定位命令BP15");\r
// mConnection.DeliverCMDMessageToSystem("Reboot",cmd);//通知下面线程状态变化\r
// break;\r
//\r
- case POWEROFF:\r
- //收到关机\r
- handlePOWEROFF(mConnection);\r
- ICLogger.i("收到服务器关机命令BP31");\r
- mConnection.DeliverCMDMessageToSystem("poweroff",cmd);//通知下面线程状态变化\r
- break;\r
+\r
// case BP40:\r
// //服务器推送文本\r
// handleBP40(mConnection,mRuntime,cmd);\r
ICLogger.i("收到服务器心率检测命令");\r
HeartRateManager.triggerPPGtest();\r
break;\r
- case bldstart:\r
- handleBldstart(mConnection);\r
- ICLogger.i("收到服务器血压检测命令");\r
- HeartRateManager.triggerPPGtest();\r
- break;\r
+\r
case wdstart:\r
handleWdstart(mConnection,mRuntime,data);\r
ICLogger.i("收到服务器体温测试及设置命令");\r
//\r
// break;\r
//\r
- case FIND:\r
- //收到查找设备消息\r
- handleFIND(mConnection);\r
- mConnection.DeliverCMDMessageToSystem("findDev",cmd);//通知下面线程状态变化\r
- break;\r
+\r
+\r
// case BP89:\r
// //心率/血压阀值\r
// handleBP89(cmd,mConnection);\r
boolean ret=true;\r
ICLogger.i("handleCmd "+type.name() + " "+cmd+" bytelen="+bytes.length );\r
if (Config.LOG_TOFILE) ICLogger.logToFile("APILog", " recv " +new String(bytes));\r
- switch (type) {\r
- case LK:\r
- // handleBP28(mConnection,cmd, mRuntime,bytes);\r
- ICLogger.i("收到服务器语音BP28");\r
- mConnection.DeliverCMDMessageToSystem("BP28", "");//通知下面线程状态变化\r
- break;\r
- }\r
+// switch (type) {\r
+// case LK:\r
+// // handleBP28(mConnection,cmd, mRuntime,bytes);\r
+// ICLogger.i("收到服务器语音BP28");\r
+// mConnection.DeliverCMDMessageToSystem("BP28", "");//通知下面线程状态变化\r
+// break;\r
+// }\r
return ret;\r
}\r
\r
--- /dev/null
+package com.ic.protocols;\r
+\r
+import android.content.ComponentName;\r
+import android.content.Context;\r
+import android.content.Intent;\r
+import android.content.ServiceConnection;\r
+import android.os.Handler;\r
+import android.os.IBinder;\r
+import android.os.Message;\r
+import android.util.Log;\r
+\r
+import java.io.IOException;\r
+\r
+import se.wetcat.qatja.MQTTConstants;\r
+import se.wetcat.qatja.MQTTException;\r
+import se.wetcat.qatja.android.MQTTConnectionConstants;\r
+import se.wetcat.qatja.android.QatjaService;\r
+import se.wetcat.qatja.messages.MQTTMessage;\r
+import se.wetcat.qatja.messages.MQTTPublish;\r
+\r
+public class protocol_mqtt_client {\r
+\r
+ private String TAG=protocol_mqtt_client.class.getSimpleName();\r
+ private Handler mHandler = new Handler(new MqttCallback());\r
+ QatjaService mClient=null;\r
+ private Context mContext;\r
+ private boolean isBound = false;\r
+ private boolean isBinding = false;\r
+\r
+ private class MqttCallback implements Handler.Callback {\r
+ @Override\r
+ public boolean handleMessage(Message msg)\r
+ {\r
+\r
+ switch (msg.what) {\r
+ case MQTTConnectionConstants.STATE_CHANGE:\r
+ handleStateChange(msg);\r
+ break;\r
+ case 3:\r
+ handleReceivedMessage(msg);\r
+ break;\r
+ }\r
+ return true;\r
+ }\r
+\r
+ }\r
+\r
+ public protocol_mqtt_client(Context context ) {\r
+\r
+ mContext=context;\r
+ }\r
+ private void handleStateChange(Message msg) {\r
+ Log.e(TAG, MQTTConnectionConstants.resolveStateName(msg.arg1));\r
+\r
+ switch (msg.arg1) {\r
+ case MQTTConnectionConstants.STATE_NONE:\r
+ onMqttDisconnected();\r
+ break;\r
+\r
+ case MQTTConnectionConstants.STATE_CONNECTING:\r
+ break;\r
+ case MQTTConnectionConstants.STATE_CONNECTED:\r
+ onMqttConnected();\r
+ break;\r
+ case MQTTConnectionConstants.STATE_CONNECTION_FAILED:\r
+ onMqttDisconnected();\r
+ break;\r
+ default:\r
+ Log.e(TAG, "Unhandled MQTT state change");\r
+ break;\r
+ }\r
+ }\r
+\r
+ private void handleReceivedMessage(Message msg) {\r
+ MQTTPublish publish = (MQTTPublish)msg.obj;\r
+\r
+// if (isDebug()) {\r
+ Log.d(TAG, "handleReceivedMessage(${publish.topicName})"+publish.getTopicName()+" data "+new String(publish.getPayload()));\r
+// }\r
+ }\r
+\r
+ private ServiceConnection mConnection = new ServiceConnection() {\r
+ @Override\r
+ public void onServiceConnected(ComponentName componentName, IBinder iBinder) {\r
+ mClient = ((QatjaService.QatjaBinder)iBinder).getService();\r
+\r
+ isBound = true;\r
+ isBinding = false;\r
+\r
+ mClient.setHandler(mHandler);\r
+ }\r
+\r
+ @Override\r
+ public void onServiceDisconnected(ComponentName componentName) {\r
+ isBound = false;\r
+ isBinding = false;\r
+ }\r
+ };\r
+\r
+\r
+ public void Resume() {\r
+ attemptBindService();\r
+ }\r
+\r
+ public void Pause() {\r
+ try {\r
+ mClient.disconnect();\r
+\r
+ mContext.unbindService(mConnection);\r
+\r
+ isBinding = false;\r
+ isBound = false;\r
+ } catch ( IllegalArgumentException ex) {\r
+ Log.e(TAG, "Couldn't unbind the service, this is probably fine considering the state changes in the app... can probably ignore this.", ex);\r
+ }\r
+\r
+\r
+ }\r
+\r
+ public void attemptSubscribeToTopic(String topic) {\r
+ Log.d(TAG, "attemptSubscribeToTopic($topic)"+topic);\r
+\r
+\r
+ try {\r
+ mClient.subscribe(topic, MQTTConstants.AT_MOST_ONCE);\r
+ } catch (Exception ex) {\r
+ Log.e(TAG, ex.getMessage());\r
+ }\r
+\r
+ }\r
+\r
+ public void disconnect() {\r
+ mClient.disconnect();\r
+ }\r
+\r
+ public void connectservice() {\r
+ if (isBound) {\r
+// attemptConnectMqtt()\r
+ } else if (!isBound && !isBinding) {\r
+ attemptBindService();\r
+ }\r
+ }\r
+\r
+ private void attemptBindService() {\r
+// if (isDebug()) {\r
+ Log.d(TAG, "attemptBindService() [isBound: $isBound, isBinding: $isBinding]");\r
+// }\r
+ if (!isBound && !isBinding) {\r
+ isBinding = true;\r
+\r
+ Intent intent = new Intent(mContext, QatjaService.class);\r
+ mContext.bindService(intent, mConnection, Context.BIND_AUTO_CREATE);\r
+ }\r
+\r
+ }\r
+\r
+ public void attemptConnectMqtt(String host,String identifier, int cycle_inSeconds) {\r
+ Log.d(TAG, "attemptConnectMqtt($host, $identifier)");\r
+\r
+ if (!(MQTTConnectionConstants.STATE_CONNECTING== mClient.getState() || MQTTConnectionConstants.STATE_CONNECTED == mClient.getState()))\r
+ {\r
+ try {\r
+ mClient.setHost(host);\r
+ mClient.setPort(1883);\r
+ mClient.setIdentifier(identifier);\r
+ mClient.setKeepAlive(cycle_inSeconds*1000);\r
+ mClient.setCleanSession(true);\r
+\r
+ mClient.connect();\r
+ } catch (Exception ex) {\r
+ Log.e(TAG, ex.getMessage());\r
+ }\r
+ }\r
+ }\r
+\r
+ void onMqttConnected() {\r
+ Log.i(TAG,"onMqttConnected");\r
+ attemptSubscribeToTopic("WBG100/v1/1/+");\r
+\r
+ }\r
+ void onMqttDisconnected() {\r
+ Log.i(TAG,"onMqttDisconnected");\r
+\r
+ }\r
+\r
+\r
+ public void sendMessage(String topic,String data){\r
+\r
+ mClient.publish(topic,data);\r
+ }\r
+}\r