From 14de918a79943e4961b09fa01ed320c6cad41f2e Mon Sep 17 00:00:00 2001 From: wjc <1243177876@qq.com> Date: 星期三, 28 六月 2023 17:14:51 +0800 Subject: [PATCH] Revert "Revert "Merge branch 'hxb' into wjc"" --- HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/gateway/HDLLinkLocalGateway.java | 799 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 799 insertions(+), 0 deletions(-) diff --git a/HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/gateway/HDLLinkLocalGateway.java b/HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/gateway/HDLLinkLocalGateway.java new file mode 100644 index 0000000..d7b6668 --- /dev/null +++ b/HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/gateway/HDLLinkLocalGateway.java @@ -0,0 +1,799 @@ +package com.hdl.sdk.link.gateway; + +import android.text.TextUtils; + +import com.google.gson.Gson; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; +import com.google.gson.JsonObject; +import com.google.gson.JsonParser; +import com.google.gson.reflect.TypeToken; +import com.hdl.sdk.link.HDLLinkLocalSdk; +import com.hdl.sdk.link.R; +import com.hdl.sdk.link.common.config.TopicConstant; +import com.hdl.sdk.link.common.event.EventDispatcher; +import com.hdl.sdk.link.common.event.EventListener; +import com.hdl.sdk.link.common.exception.HDLLinkCode; +import com.hdl.sdk.link.common.exception.HDLLinkException; +import com.hdl.sdk.link.common.utils.IdUtils; +import com.hdl.sdk.link.common.utils.IpUtils; +import com.hdl.sdk.link.common.utils.LogUtils; +import com.hdl.sdk.link.common.utils.SPUtils; +import com.hdl.sdk.link.common.utils.ThreadToolUtils; +import com.hdl.sdk.link.common.utils.gson.GsonConvert; + +import com.hdl.sdk.link.core.bean.LinkRequest; +import com.hdl.sdk.link.core.bean.LinkResponse; +import com.hdl.sdk.link.core.bean.gateway.GatewayBean; +import com.hdl.sdk.link.core.bean.response.BaseLocalResponse; +import com.hdl.sdk.link.core.callback.GatewayCallBack; +import com.hdl.sdk.link.core.callback.HDLLinkCallBack; +import com.hdl.sdk.link.core.callback.HDLLinkTCallBack; +import com.hdl.sdk.link.core.config.HDLLinkConfig; +import com.hdl.sdk.link.core.connect.HDLConnectHelper; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +/** + * Created by hxb on 2021/12/23. + */ +public class HDLLinkLocalGateway { + //instance + private volatile static HDLLinkLocalGateway instance; + + //getInstance + public static synchronized HDLLinkLocalGateway getInstance() { + if (instance == null) { + synchronized (HDLLinkLocalGateway.class) { + if (instance == null) { + instance = new HDLLinkLocalGateway(); + } + } + } + return instance; + } + + /** + * 缃戝叧鍒楄〃锛岃褰曟墍鏈夋悳绱㈠埌鐨勭綉鍏筹紝鍙兘鍖呭惈鏂嚎鐨勭綉鍏� + */ + private final List<GatewayBean> gatewayBeanList = new ArrayList(); + + /** + * 鑾峰彇缂撳瓨鐨勭綉鍏冲垪琛紝鍙兘鍖呭惈鏂嚎鐨勭綉鍏� + * + * @return 缃戝叧鍒楄〃 + */ + public List<GatewayBean> getGatewayList() { + return gatewayBeanList; + } + + /** + * 閫氳繃oid鎴栬�呯綉鍏矷D鎴栬�匒MC鑾峰彇鍐呭瓨涓殑缃戝叧锛屾敞鎰忥紝濡傛灉鏄繙绋嬮�氳锛実atewayBeanList瑕佸钩鍙颁笂缁戝畾鐨勪富缃戝叧鍙婁粠缃戝叧杩涘幓锛岃涓嶈幏鍙栦笉鍒扮綉鍏充俊鎭� + * + * @param oidOrGatewayId + * @return + */ + public GatewayBean getGatewayByOidOrGatewayId(String oidOrGatewayId) { + if (TextUtils.isEmpty(oidOrGatewayId)) { + return null; + } + for (GatewayBean gatewayBean : gatewayBeanList) { + if (oidOrGatewayId.equals(gatewayBean.getOid()) + || oidOrGatewayId.equals(gatewayBean.getGatewayId()) + || oidOrGatewayId.equals(gatewayBean.getDevice_mac()) + || oidOrGatewayId.equals(gatewayBean.getIp_address()) + ) + return gatewayBean; + } + return null; + } + + /** + * 閫氳繃IP鑾峰彇缃戝叧淇℃伅 + * + * @param ipAddress + * @return + */ + public GatewayBean getGatewayByIpAddress(String ipAddress) { + if (TextUtils.isEmpty(ipAddress)) { + return null; + } + for (GatewayBean gatewayBean : gatewayBeanList) { + if (ipAddress.equals(gatewayBean.getIp_address())) + return gatewayBean; + } + return null; + } + + /** + * 閫氳繃spk鑾峰彇缃戝叧锛岃繖涓篃鏀寔鑾峰彇姣背娉� + * + * @param spkList 闆嗗悎 + * @return 杩斿洖缃戝叧鍒楄〃 + */ + public List<GatewayBean> getGatewayBySpk(List<String> spkList) { + if (spkList.size() == 0) { + return this.getGatewayList(); + } + List<GatewayBean> gatewayBeanList = new ArrayList<>(); + for (GatewayBean gatewayBean : this.getGatewayList()) { + if (spkList.contains(gatewayBean.getGatewayType())) + gatewayBeanList.add(gatewayBean); + } + return gatewayBeanList; + } + + /** + * 鑾峰彇缃戝叧鍒楄〃 鍘绘帀绾㈠瀹濊繖绉嶈澶� + * + * @param spkList 闆嗗悎 + * @return 杩斿洖缃戝叧鍒楄〃 + */ + public List<GatewayBean> getGatewayByGatewayType(List<String> spkList) { + if (spkList.size() == 0) { + return this.getGatewayList(); + } + List<GatewayBean> gatewayBeanList = new ArrayList<>(); + for (GatewayBean gatewayBean : this.getGatewayList()) { + if (spkList.contains(gatewayBean.getGatewayType()) && !"MIR01R-LK.10".equals(gatewayBean.getDevice_model())) + gatewayBeanList.add(gatewayBean); + } + return gatewayBeanList; + } + + /** + * 鑾峰彇鏈湴缃戝叧瀵硅薄(鍖呮嫭姣背娉�) + * + * @param macAndSid 璁惧mac + * @return 鎵惧埌杩斿洖GatewayBean, 鏈壘鍒拌繑鍥瀗ull. + */ + public GatewayBean getLocalGateway(String macAndSid) { + if (TextUtils.isEmpty(macAndSid)) { + return null; + } + for (GatewayBean gatewayBean : this.getGatewayList()) { + if (macAndSid.equals(gatewayBean.getDevice_mac()) + || macAndSid.equals(gatewayBean.getSid())) { + return gatewayBean; + } + } + return null; + } + + /** + * 鑾峰彇褰撳墠浣忓畢鐨勪富缃戝叧; + * + * @param homeId 浣忓畢id + * @return 鎵惧埌杩斿洖GatewayBean, 鏈壘鍒拌繑鍥瀗ull. + */ + public GatewayBean findMainGateway(String homeId) { + for (GatewayBean gatewayBean : this.getGatewayList()) { + if (gatewayBean.getMaster().equals("true") + && gatewayBean.getHomeId().equals(homeId) + && gatewayBean.getGatewayType().equals("AGATEWAY")) { + return gatewayBean; + } + } + return null; + } + + /** + * 鎼滅储缃戝叧锛屽彧鍙戜竴娆★紝娌℃湁鍥炶皟 + */ + public void serchGatewayOneTime() { + String time = String.valueOf(System.currentTimeMillis()); + JsonObject jsonObject = new JsonObject(); + jsonObject.addProperty("id", IdUtils.getUUId()); + jsonObject.addProperty("time_stamp", time); + LinkRequest message = new LinkRequest(TopicConstant.GATEWAY_SEARCH, + jsonObject.toString(), false); + + String ipAddress = IpUtils.getBroadcastAddress(); + new HDLConnectHelper(1, ipAddress, message, false).send(); + } + + + /** + * 鍒涙柊鎵�鏈夊湪绾跨殑缃戝叧锛屽寘鎷綋鍓嶄綇瀹呯殑鍙婃病鏈夌粦瀹氳繃鐨勭綉鍏� + * + * @param callBack 鍥炶皟 + */ + public void refreshGatewayByHome(String homeId, GatewayCallBack callBack) { + refreshGatewayByHome(homeId, true, callBack); + } + + /** + * 鏍规嵁浣忓畢id鑾峰彇缃戝叧 + * + * @param homeId 杩囨护鐨勪綇瀹卛d + * @param needEmptyHomeIdGateway 缃戝叧鐨勪綇瀹卛d涓虹┖鏃讹紝鏄惁鍙互鍔犲叆缃戝叧鍒楄〃 + * @param callBack 鍥炶皟鏂规硶 + */ + public void refreshGatewayByHome(String homeId, boolean needEmptyHomeIdGateway, GatewayCallBack callBack) { + refreshGatewayByHomeIdAndSpk(homeId, this.getGatewayTypeList(), needEmptyHomeIdGateway, callBack); + } + + /** + * 鑾峰彇缃戠粶璁惧锛屽寘鎷綉鍏冲強姣背娉㈢瓑缃戠粶璁惧 + * + * @param homeId 浣忓畢Id + * @param spk 缃戠粶璁惧spk + * @param needEmptyHomeIdGateway 鏄惁闇�瑕佺┖浣忓畢Id璁惧 + * @param callBack 鍥炶皟 + */ + public void refreshGatewayByHomeIdAndSpk(String homeId, List<String> spk, boolean needEmptyHomeIdGateway, GatewayCallBack callBack) { + String topicReply = TopicConstant.GATEWAY_SEARCH_REPLY; + final List<GatewayBean> tempGatewayBeanList = new ArrayList<>(); + EventListener eventListener = getSearchGatewayEvent(homeId, spk, needEmptyHomeIdGateway, tempGatewayBeanList); + EventDispatcher.getInstance().register(topicReply, eventListener); + + ThreadToolUtils.getInstance().newFixedThreadPool(1).execute(new Runnable() { + @Override + public void run() { + int count = 5; + while (0 < count--) { + try { + //鎼滅储缃戝叧 + serchGatewayOneTime(); + Thread.sleep(300L); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + //瓒呭嚭娆℃暟鍚庣Щ闄ょ洃鍚簨浠� + EventDispatcher.getInstance().remove(topicReply, eventListener); + if (callBack != null) { + if (tempGatewayBeanList.size() == 0) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_GET_GATEWAY_FAILURE_ERROR)); + } else { + callBack.onSuccess(tempGatewayBeanList); + } + } + } + }); + } + + /** + * 鍒涙柊鎵�鏈夊湪绾跨殑缃戝叧锛屽寘鎷綋鍓嶄綇瀹呯殑鍙婃病鏈夌粦瀹氳繃鐨勭綉鍏� + * + * @param callBack 鍥炶皟 + */ + public void refreshGateway(GatewayCallBack callBack) { + String topicReply = TopicConstant.GATEWAY_SEARCH_REPLY; + final List<GatewayBean> tempGatewayBeanList = new ArrayList<>(); + EventListener eventListener = getSearchGatewayEvent(this.getGatewayTypeList(), tempGatewayBeanList); + EventDispatcher.getInstance().register(topicReply, eventListener); + ThreadToolUtils.getInstance().newFixedThreadPool(1).execute(new Runnable() { + @Override + public void run() { + int count = 5; + while (0 < count--) { + try { + //鎼滅储缃戝叧 + serchGatewayOneTime(); + Thread.sleep(300L); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + + //瓒呭嚭娆℃暟鍚庣Щ闄ょ洃鍚簨浠� + EventDispatcher.getInstance().remove(topicReply, eventListener); + if (callBack != null) { + if (tempGatewayBeanList.size() == 0) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_GET_GATEWAY_FAILURE_ERROR)); + } else { + + callBack.onSuccess(tempGatewayBeanList); + } + } + } + }); + } + +// /** +// * 鑾峰彇鎼滅储缃戝叧浜嬩欢 +// * +// * @param homeId +// * @return +// */ +// private EventListener getSearchGatewayEvent(String homeId, final List<GatewayBean> tempGatewayBeanList) { +// return getSearchGatewayEvent(homeId,true,tempGatewayBeanList); +// } + + +// /** +// * 鑾峰彇鎼滅储缃戝叧浜嬩欢 +// * +// * @param homeId +// * @return +// */ +// private EventListener getSearchGatewayEvent(String homeId, boolean needEmptyHomeIdGateway, final List<GatewayBean> tempGatewayBeanList) { +// //娉ㄥ唽鎼滅储缃戝叧鐩戝惉 +// return new EventListener() { +// @Override +// public void onMessage(Object msg) { +// if (!(msg instanceof LinkResponse)) { +// return; +// } +// GatewayBean gateway = getGatewayBeanByResponse((LinkResponse) msg); +// if (gateway == null) { +// return; +// } +// gateway.setOnline(true); +// gateway.setIsLocalGateWay(true);//鏈湴鎼滅储鍒扮殑缃戝叧鏍囪瘑涓烘湰鍦扮綉鍏� +// +// //鍙姞杞戒綇瀹呬竴鏍风殑鎴栬�呯綉鍏宠繕娌℃湁閰嶇疆杩囩殑锛屾垨鑰呬笉闇�瑕佷綇瀹卛d涓虹┖鐨勭綉鍏� +// if (homeId.equals(gateway.getHomeId()) || (needEmptyHomeIdGateway == true && TextUtils.isEmpty(gateway.getHomeId()))) { +// //鏇存柊缂撳瓨缃戝叧锛屼細璁板綍鎵�鏈夋敹鍒扮殑缃戝叧锛屼互涓轰簡淇濆瓨缃戝叧鐨処P淇℃伅 +// updateGatewayList(gatewayBeanList, gateway); +// //鏇存柊褰撳墠璇诲彇缃戝叧鐨勫垪琛紝杩欎釜鍒楄〃姣忔閮芥槸娓呯┖鍐嶈鍙� +// updateGatewayList(tempGatewayBeanList, gateway); +// } +// } +// }; +// } + + /** + * 鑾峰彇鎼滅储缃戝叧浜嬩欢 + * + * @param homeId + * @return + */ + private EventListener getSearchGatewayEvent(String homeId, List<String> spk, boolean needEmptyHomeIdGateway, final List<GatewayBean> tempGatewayBeanList) { + //娉ㄥ唽鎼滅储缃戝叧鐩戝惉 + return new EventListener() { + @Override + public void onMessage(Object msg) { + if (!(msg instanceof LinkResponse)) { + return; + } + GatewayBean gateway = getGatewayBeanByResponse((LinkResponse) msg); + if (gateway == null) { + return; + } + gateway.setOnline(true); + gateway.setIsLocalGateWay(true);//鏈湴鎼滅储鍒扮殑缃戝叧鏍囪瘑涓烘湰鍦扮綉鍏� + //鍙姞杞戒綇瀹呬竴鏍风殑鎴栬�呯綉鍏宠繕娌℃湁閰嶇疆杩囩殑锛屾垨鑰呬笉闇�瑕佷綇瀹卛d涓虹┖鐨勭綉鍏� + if (homeId.equals(gateway.getHomeId()) || (needEmptyHomeIdGateway == true && TextUtils.isEmpty(gateway.getHomeId()))) { + //鏇存柊缂撳瓨缃戝叧锛屼細璁板綍鎵�鏈夋敹鍒扮殑缃戝叧锛屼互涓轰簡淇濆瓨缃戝叧鐨処P淇℃伅 + updateGatewayList(gatewayBeanList, gateway); + //闈炴悳绱㈢殑缃戝叧绫讳技杩斿洖 + if (spk.contains(gateway.getGatewayType())) { + //鏇存柊褰撳墠璇诲彇缃戝叧鐨勫垪琛紝杩欎釜鍒楄〃姣忔閮芥槸娓呯┖鍐嶈鍙� + updateGatewayList(tempGatewayBeanList, gateway); + } + } + } + }; + } + + /** + * 鑾峰彇鎼滅储缃戝叧浜嬩欢 杩欒竟涓嶈繃婊omeId + * + * @return + */ + private EventListener getSearchGatewayEvent(List<String> spk, final List<GatewayBean> tempGatewayBeanList) { + //娉ㄥ唽鎼滅储缃戝叧鐩戝惉 + return new EventListener() { + @Override + public void onMessage(Object msg) { + if (!(msg instanceof LinkResponse)) { + return; + } + GatewayBean gateway = getGatewayBeanByResponse((LinkResponse) msg); + if (gateway == null) { + return; + } + gateway.setIsLocalGateWay(true);//鏈湴鎼滅储鍒扮殑缃戝叧鏍囪瘑涓烘湰鍦扮綉鍏� + //鍗囩骇缃戝叧椹卞姩 闇�瑕佹樉绀烘墍鏈夌綉鍏� + //鈿狅笍杩欒竟涓嶉渶瑕佹坊鍔犲埌gatewayBeanList 鍥犱负杩欎釜鏄綉鍏崇绾垮崌绾х殑鏃跺�欑殑鍔熻兘 +// updateGatewayList(gatewayBeanList, gateway); + //鏇存柊褰撳墠璇诲彇缃戝叧鐨勫垪琛紝杩欎釜鍒楄〃姣忔閮芥槸娓呯┖鍐嶈鍙� + if (spk.contains(gateway.getGatewayType())) { + //鏇存柊褰撳墠璇诲彇缃戝叧鐨勫垪琛紝杩欎釜鍒楄〃姣忔閮芥槸娓呯┖鍐嶈鍙� + updateGatewayList(tempGatewayBeanList, gateway); + } + } + }; + } + + /** + * 鏇存柊鏀跺埌鐨勭綉鍏冲埌鍒楄〃 + * + * @param gatewayBeanList + * @param gateway 褰撳墠鏀跺埌鐨勭綉鍏� + */ + void updateGatewayList(final List<GatewayBean> gatewayBeanList, GatewayBean gateway) { + + if (TextUtils.isEmpty(gateway.getOid()) || TextUtils.isEmpty(gateway.getDevice_mac())) { + LogUtils.e("缃戝叧Mac鎴栬�匫id涓虹┖锛屾棤鏁堢綉鍏�"); + return; + } + + boolean isFound = false;//鏄惁鍦ㄥ唴瀛樹腑鎵惧埌缃戝叧瀵硅薄 + //鎵惧嚭mac涓�鏍风殑缃戝叧鏇存柊鏈�鏂版暟鎹� + for (int i = 0; i < gatewayBeanList.size(); i++) { + if (gatewayBeanList.get(i).getDevice_mac().equals(gateway.getDevice_mac())) { + isFound = true; + gatewayBeanList.set(i, gateway); +// break; + } + } + + //娓呴櫎oid涓�鏍凤紝mac涓嶄竴鏍风殑缃戝叧缂撳瓨銆備竴鑸槸鍦ㄧ綉鍏虫浛鎹㈢殑鎯呭喌绌洪棿鍑虹幇 + for (int i = 0; i < gatewayBeanList.size(); i++) { + if (gatewayBeanList.get(i).getDevice_mac().equals(gateway.getDevice_mac()) && !gatewayBeanList.get(i).getOid().equals(gateway.getOid())) { + gatewayBeanList.remove(i--); + } + } + + //娌℃湁鎵惧埌灏辨坊鍔� + if (!isFound) { + gatewayBeanList.add(gateway); + } + } + + /** + * 鑾峰彇缃戝叧瀵硅薄 + * + * @param linkResponse + * @return + */ + private GatewayBean getGatewayBeanByResponse(LinkResponse linkResponse) { + String data = linkResponse.getData(); + if (!TextUtils.isEmpty(data)) { + final BaseLocalResponse<GatewayBean> response = GsonConvert.getGson().fromJson(data, new TypeToken<BaseLocalResponse<GatewayBean>>() { + }.getType()); + return response.getObjects(); + } + return null; + } + + + /* + * 缁戝畾缃戝叧 + * */ + public void SetGatewayRemoteInfo(String master, String mac, String regionUrl, String ip, boolean isEncrypt, HDLLinkCallBack callBack) { + String topic = String.format(TopicConstant.GATEWAY_EDIT_REMOTE, mac); + + JsonObject jObject = new JsonObject(); + if (master.equals("true")) { + jObject.addProperty("server_addr", regionUrl); + jObject.addProperty("remote", "true"); + } else { + jObject.addProperty("server_addr", ""); + jObject.addProperty("remote", "false"); + } + + JsonObject sendJsonObj = new JsonObject(); + sendJsonObj.add("objects", jObject); + String time = String.valueOf(System.currentTimeMillis()); + sendJsonObj.addProperty("time_stamp", time); + sendJsonObj.addProperty("id", IdUtils.getUUId()); + String sendStr = sendJsonObj.toString(); + + LinkRequest message = new LinkRequest(topic, sendStr, isEncrypt); + new HDLConnectHelper(ip, message, new HDLConnectHelper.HdlSocketListener() { + @Override + public void onSucceed(Object msg) { + if (callBack == null) return; + callBack.onSuccess("1"); + } + + @Override + public void onFailure(HDLLinkCode hdlLinkCode) { + if (callBack == null) return; + callBack.onError(HDLLinkException.getErrorWithCode(hdlLinkCode)); + } + }, true).send(); + } + + /* + * 缁戝畾缃戝叧 + * 缂栬緫homeId缁欑綉鍏� + * */ + public void bindGateway(String master, String mac, String homeId, String regionUrl, String ip, boolean isEncrypt, HDLLinkCallBack callBack) { + String topic = String.format(TopicConstant.GATEWAY_EDIT_REMOTE, mac); + + JsonObject jObject = new JsonObject(); + jObject.addProperty("homeId", homeId); +// if(master.equals("true")) { +// jObject.addProperty("server_addr", regionUrl); +// jObject.addProperty("remote", "true"); +// }else { +// jObject.addProperty("server_addr", ""); +// jObject.addProperty("remote", "false"); +// } + + JsonObject sendJsonObj = new JsonObject(); + sendJsonObj.add("objects", jObject); + String time = String.valueOf(System.currentTimeMillis()); + sendJsonObj.addProperty("time_stamp", time); + sendJsonObj.addProperty("id", IdUtils.getUUId()); + String sendStr = sendJsonObj.toString(); + + LinkRequest message = new LinkRequest(topic, sendStr, isEncrypt); + new HDLConnectHelper(ip, message, new HDLConnectHelper.HdlSocketListener() { + @Override + public void onSucceed(Object msg) { + if (callBack == null) return; + callBack.onSuccess("1"); + } + + @Override + public void onFailure(HDLLinkCode hdlLinkCode) { + if (callBack == null) return; + callBack.onError(HDLLinkException.getErrorWithCode(hdlLinkCode)); + } + }, true).send(); + } + + /* + * 鍒濆鍖栫綉鍏� + * */ + public void initializeGateway(String mac, String oid, String ip, boolean isEncrypt, HDLLinkCallBack callBack) { + String topic = String.format(TopicConstant.GATEWAY_INITIALIZE_REMOTE, oid); + + JsonObject sendJsonObj = new JsonObject(); + String time = String.valueOf(System.currentTimeMillis()); + sendJsonObj.addProperty("time_stamp", time); + sendJsonObj.addProperty("id", IdUtils.getUUId()); + JsonObject jObject = new JsonObject(); + jObject.addProperty("device_mac", mac); + sendJsonObj.add("objects", jObject); + String sendStr = sendJsonObj.toString(); + + LinkRequest message = new LinkRequest(topic, sendStr, isEncrypt); + new HDLConnectHelper(ip, message, new HDLConnectHelper.HdlSocketListener() { + @Override + public void onSucceed(Object msg) { + if (callBack == null) return; + callBack.onSuccess("1"); + } + + @Override + public void onFailure(HDLLinkCode hdlLinkCode) { + if (callBack == null) return; + callBack.onError(HDLLinkException.getErrorWithCode(hdlLinkCode)); + } + }, true).send(); + } + + /* + * 璁剧疆涓讳粠缃戝叧鏍囪 + * */ + public void setMasterGateway(String regionUrl, String ip, String mac, String master, boolean isEncrypt, HDLLinkCallBack callBack) { + String topic = String.format(TopicConstant.GATEWAY_EDIT_LOCAL, mac); + + JsonObject jObject = new JsonObject(); + jObject.addProperty("master", master); + + JsonObject sendJsonObj = new JsonObject(); + sendJsonObj.add("objects", jObject); + String time = String.valueOf(System.currentTimeMillis()); + sendJsonObj.addProperty("time_stamp", time); + sendJsonObj.addProperty("id", IdUtils.getUUId()); + String sendStr = sendJsonObj.toString(); + + LinkRequest message = new LinkRequest(topic, sendStr, isEncrypt); + new HDLConnectHelper(ip, message, new HDLConnectHelper.HdlSocketListener() { + @Override + public void onSucceed(Object msg) { + if ("true".equals(master)) { + String longStr1 = SPUtils.getString("longitude"); + String latStr1 = SPUtils.getString("latitude"); + if (!TextUtils.isEmpty(longStr1) && !TextUtils.isEmpty(latStr1)) { + HDLLinkLocalSdk.getInstance().gatewayLocation(mac, longStr1, latStr1, isEncrypt, new HDLLinkTCallBack<String>() { + @Override + public void onSuccess(String data) { + } + + @Override + public void onError(HDLLinkException e) { + } + }); + } + } + if (callBack == null) return; + callBack.onSuccess("1"); + SetGatewayRemoteInfo(master, mac, regionUrl, ip, isEncrypt, new HDLLinkCallBack() { + @Override + public void onSuccess(String msg) { + + } + + @Override + public void onError(HDLLinkException e) { + + } + }); + } + + @Override + public void onFailure(HDLLinkCode hdlLinkCode) { + if (callBack == null) return; + callBack.onError(HDLLinkException.getErrorWithCode(hdlLinkCode)); + } + }, true).send(); + } + + /** + * 璁剧疆缃戝叧鍏ョ綉浠庢満妯″紡 + */ + public void AuthGateway(String ip, String mac, HDLLinkCallBack callBack) { + String topic = String.format(TopicConstant.GATEWAY_AUTH, mac); + + JsonObject sendJsonObj = new JsonObject(); + String time = String.valueOf(System.currentTimeMillis()); + sendJsonObj.addProperty("time_stamp", time); + sendJsonObj.addProperty("id", IdUtils.getUUId()); + JsonObject jObject = new JsonObject(); + jObject.addProperty("spk", "LINKDEVICE"); + jObject.addProperty("time", "120"); + sendJsonObj.add("objects", jObject); + + + String sendStr = sendJsonObj.toString(); + LinkRequest message = new LinkRequest(topic, sendStr, false); + new HDLConnectHelper(ip, message, new HDLConnectHelper.HdlSocketListener() { + @Override + public void onSucceed(Object msg) { + callBack.onSuccess(""); + } + + @Override + public void onFailure(HDLLinkCode hdlLinkCode) { + callBack.onError(HDLLinkException.getErrorWithCode(hdlLinkCode)); + } + }, true).send(); + } + + /** + * 璁剧疆缃戝叧鍏ョ綉浠庢満妯″紡 + */ + public void AuthGateway(String ip, String mac) { + String topic = String.format(TopicConstant.GATEWAY_AUTH, mac); + + JsonObject sendJsonObj = new JsonObject(); + String time = String.valueOf(System.currentTimeMillis()); + sendJsonObj.addProperty("time_stamp", time); + sendJsonObj.addProperty("id", IdUtils.getUUId()); + JsonObject jObject = new JsonObject(); + jObject.addProperty("spk", "LINKDEVICE"); + jObject.addProperty("time", "120"); + sendJsonObj.add("objects", jObject); + + + String sendStr = sendJsonObj.toString(); + LinkRequest message = new LinkRequest(topic, sendStr, false); + new HDLConnectHelper(ip, message, new HDLConnectHelper.HdlSocketListener() { + @Override + public void onSucceed(Object msg) { + } + + @Override + public void onFailure(HDLLinkCode hdlLinkCode) { + } + }, true).send(); + } + + /* + * 鑾峰彇缃戝叧淇℃伅 + * */ + public void getGatewayInfo(String ip, String mac, boolean isEncrypt, HDLLinkCallBack callBack) { + String topic = String.format(TopicConstant.GATEWAY_GET, mac); + + JsonObject sendJsonObj = new JsonObject(); + String time = String.valueOf(System.currentTimeMillis()); + sendJsonObj.addProperty("time_stamp", time); + sendJsonObj.addProperty("id", IdUtils.getUUId()); + String sendStr = sendJsonObj.toString(); + + LinkRequest message = new LinkRequest(topic, sendStr, isEncrypt); + new HDLConnectHelper(ip, message, new HDLConnectHelper.HdlSocketListener() { + @Override + public void onSucceed(Object msg) { + if (callBack == null) return; + callBack.onSuccess("1"); + } + + @Override + public void onFailure(HDLLinkCode hdlLinkCode) { + if (callBack == null) return; + callBack.onError(HDLLinkException.getErrorWithCode(hdlLinkCode)); + } + }, true).send(); + } + + + /** + * 鍙戦�佹暟鎹埌Link缃戝叧 + * + * @param ip 缃戝叧IP + * @param mac 缃戝叧mac + * @param isEncrypt 鏄惁鍔犲瘑 + * @param topic 璇锋眰涓婚 + * @param jObject 璐熻浇鏁版嵁<娌℃湁濉玭ull></> + * @param sendPath 鍙戦�佽矾寰�<绫诲悕+鏂规硶鍚�>class->methodName</> + */ + public void sendDataToLinkGateway(String ip, String mac, boolean isEncrypt, + String topic, Object jObject, String sendPath, HDLLinkCallBack callBack) { + String topicSend = topic.replace("%s", mac); + //缁勮闇�瑕佸彂閫佺殑鏁版嵁 + String sendStr = createSendData(jObject); +// LogUtils.i("sendDataToLinkGateway->" + sendPath + "->鏈湴鍙戦�乗r\n" + topicSend + "\r\n" + sendStr); + LinkRequest message = new LinkRequest(topicSend, sendStr, isEncrypt); + GatewayBean gatewayBean = this.getLocalGateway(mac); + if (gatewayBean != null) { + message.setCloudTopic(topic.replace("%s", gatewayBean.getGatewayId())); + } + new HDLConnectHelper(ip, message, new HDLConnectHelper.HdlSocketListener() { + @Override + public void onSucceed(Object msg) { + if (callBack == null) return; + try { + JSONObject jsonObject = new JSONObject(new Gson().toJson(msg)); + if (jsonObject.has("data")) { + callBack.onSuccess(jsonObject.getString("data")); + } + } catch (Exception e) { + callBack.onSuccess(e.getMessage()); + } +// LogUtils.i("sendDataToLinkGateway->"+sendPath+"->鏈湴鎺ユ敹鏁版嵁\r\n"+msg.toString()); + } + + @Override + public void onFailure(HDLLinkCode hdlLinkCode) { + if (callBack == null) return; + callBack.onError(HDLLinkException.getErrorWithCode(hdlLinkCode)); +// LogUtils.i("sendDataToLinkGateway->" + sendPath + "->鏈湴鎺ユ敹鏁版嵁->澶辫触(-200)"); + } + }, true, mac).send(); + } + + /** + * 缁勮闇�瑕佸彂閫佺殑鏁版嵁 + * + * @param jObject 璐熻浇鏁版嵁<娌℃湁濉玭ull> + * @return 杩斿洖json瀛楃涓� + */ + private String createSendData(Object jObject) { + //topic = String.format(TopicConstant.GATEWAY_EDIT_LOCAL, mac); + JsonObject sendJsonObj = new JsonObject(); + if (jObject != null) { + if (jObject instanceof JsonObject) { + sendJsonObj.add("objects", (JsonObject) jObject); + } else if (jObject instanceof JsonArray) { + sendJsonObj.add("objects", (JsonArray) jObject); + } else if (jObject instanceof JSONArray) { + JsonArray array = GsonConvert.getGson().fromJson(jObject.toString(), new TypeToken<JsonArray>() { + }.getType()); + sendJsonObj.add("objects", array); + } + } + String time = String.valueOf(System.currentTimeMillis()); + sendJsonObj.addProperty("time_stamp", time); + sendJsonObj.addProperty("id", IdUtils.getUUId()); + return sendJsonObj.toString(); + } + + /** + * 鏀寔缃戝叧绫诲瀷 + * + * @return 绫诲瀷鍒楄〃 + */ + private List<String> getGatewayTypeList() { + List<String> typeList = new ArrayList<>(); + typeList.add("AGATEWAY");//缃戝叧 + typeList.add("sensor.mmv_sleep");//姣背娉pk + typeList.add("sensor.mmv_pose");//姣背娉pk + return typeList; + } +} -- Gitblit v1.8.0