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