package com.hdl.sdk.connect; import android.content.Context; import com.hdl.hdlhttp.HxHttpConfig; import com.hdl.sdk.common.event.DeleteNetworkListener; import com.hdl.sdk.common.event.EventDispatcher; import com.hdl.sdk.common.event.EventListener; import com.hdl.sdk.common.utils.LogUtils; import com.hdl.sdk.connect.bean.request.AuthenticateRequest; import com.hdl.sdk.connect.bean.request.DeviceControlRequest; import com.hdl.sdk.connect.bean.request.ListSidRequest; import com.hdl.sdk.connect.bean.request.ListUploadRequest; import com.hdl.sdk.connect.callback.HDLLinkCallBack; import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack; import com.hdl.sdk.connect.cloud.CallBackListener; import com.hdl.sdk.connect.cloud.CheckAppVersionListener; import com.hdl.sdk.connect.cloud.HdlCloudApi; import com.hdl.sdk.connect.cloud.HdlCloudController; import com.hdl.sdk.connect.cloud.listener.GatewayListener; import com.hdl.sdk.connect.cloud.listener.SibichiListener; import com.hdl.sdk.connect.config.HDLCloudConfig; import com.hdl.sdk.connect.config.HDLLinkConfig; import com.hdl.sdk.connect.socket.HDLAuthSocket; import com.hdl.sdk.connect.socket.HDLSocket; import java.util.List; import okhttp3.logging.HttpLoggingInterceptor; /** * Created by jlchen on 11/15/21. * * @Description : HDLLink */ public class HDLLink { /** * instance */ private static final HDLLink instance = new HDLLink(); private String appKey, appSecret; public DeleteNetworkListener listener; /** * getInstance * * @return HDLLink */ public static HDLLink getInstance() { // if (instance == null) { // synchronized (HDLLink.class) { // if (instance == null) { // instance = new HDLLink(); // } // } // } return instance; } public String getAppKey() { return appKey; } public void setAppKey(String appKey) { this.appKey = appKey; } public String getAppSecret() { return appSecret; } public void setAppSecret(String appSecret) { this.appSecret = appSecret; } /** * 注册所有主题消息的监听 * * @param listener */ public synchronized void registerAllTopicsListener(EventListener listener) { EventDispatcher.getInstance().registerAllTopicsListener(listener); } /** * 取消所有主题消息的监听 * * @param listener */ public synchronized void removeAllTopicsListener(EventListener listener) { if (listener == null) return; EventDispatcher.getInstance().removeAllTopicsListener(listener); } /** * 注册退网主题的监听 * * @param listener */ public synchronized void setDeleteNetworkListener(DeleteNetworkListener listener) { this.listener = listener; } /***********************三方设备和网关通信之前的认证流程****************************/ /** * 检测是否已经认证过 * 认证通过才能进行设备控制 * * @return */ public boolean checkIfCertified() { return HDLLinkConfig.getInstance().checkIfCertified(); } public void selectNetwork(String networkName) { HDLLinkConfig.getInstance().setNetworkName(networkName); } public String getParentOid() { return HDLLinkConfig.getInstance().getParentOid(); } /** * 开始监听和发起入网及认证请求 * * @param request 认证请求信息 * @param callBack 结果回调 */ public void startAuthenticateRequest(AuthenticateRequest request, HDLLinkCallBack callBack) { LogUtils.i("发送认证请求"); HDLAuthSocket.getInstance().startAuthenticateRequest(request, callBack); } /** * 发送入网及认证请求 * * @param ip 网关IP * @param request 认证请求信息 * @param callBack 结果回调 */ public void sendAuthenticateRequest(String ip, AuthenticateRequest request, HDLLinkCallBack callBack) { HDLAuthSocket.getInstance().sendAuthenticateRequest(ip, request, callBack); } /** * 入网认证结果反馈 * * @param mac mac * @param result 结果0/-1 * @param message 认证信息 * @param auth_code 云端认证code * @param callBack 结果回调 */ public void UploadDeviceAuth(String mac, String result, String message, String auth_code, HDLLinkCallBack callBack) { HDLSocket.getInstance().UploadDeviceAuth(mac, result, message, auth_code, callBack); } /** * 申请设备密钥(根据设备MAC) * * @param supplier 厂商 * @param mac 设备mac * @param spk 设备spk * @param callBack 结果回调 */ public void applyDeviceSecret(String supplier, String mac, String spk, CallBackListener callBack) { LogUtils.i("申请设备密钥"); HdlCloudController.applyDeviceSecret(supplier, mac, spk, callBack); } /** * 检测更新 * * @param versionCode 当前版本 * @param appCode appCode * @param listener 结果回调 */ public void checkAppVersion(String versionCode, String appCode, CheckAppVersionListener listener) { LogUtils.i("检测更新"); HdlCloudController.checkAppVersion(versionCode, appCode, listener); } /** * 初始化云端 */ public void initCloud(Context context, String appKey, String appSecret) { HDLCloudConfig.getInstance().init(context, appKey, appSecret, HdlCloudApi.BASE_CHINA_URL); HxHttpConfig.getInstance().ignoreSSL(); HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(); httpLoggingInterceptor.level(HttpLoggingInterceptor.Level.BODY); HxHttpConfig.getInstance().addInterceptor(httpLoggingInterceptor); } /** * 获取思必驰token * * @param homeId homeId * @param clientId clientId * @param listener 结果回调 */ public void getSibichiToken(String homeId, String clientId, SibichiListener listener) { LogUtils.i("获取思必驰token"); HdlCloudController.getSibichiToken(homeId, clientId, listener); } /** * 获取主网关信息 * * @param homeId homeId * @param listener 结果回调 */ public void syncMainGateway(String homeId, GatewayListener listener) { LogUtils.i("获取主网关信息"); HdlCloudController.syncMainGateway(homeId, listener); } /** * 通知删除并退网子设备 * * @param oid 从网关(设备)oid * @param isForce 是否强制退网 * @param callBack 结果回调 */ public void deleteNetwork(String oid, boolean isForce, HDLLinkCallBack callBack) { HDLSocket.getInstance().deleteNetwork(oid, isForce, callBack); } /***********************三方设备请先认证成功 再调用下面的接口和网关通信****************************/ /** * 组播搜索指定网关是否在线,搜索到则返回指定的网关对象 * * @param callBack 回调 */ public void searchGatewayMulticast(HDLAuthSocket.SearchGatewayCallBack callBack) { HDLAuthSocket.getInstance().searchGatewayMulticast(callBack); } /** * 组播搜索指定网关是否在线,搜索到则返回指定的网关对象 * * @param callBack 回调 */ public void searchGatewayBroadcast(HDLAuthSocket.SearchGatewayCallBack callBack) { HDLAuthSocket.getInstance().searchGatewayBroadcast(callBack); } /** * 获取设备列表 */ public void getDeviceList(HDLLinkCallBack callBack) { HDLSocket.getInstance().getDeviceList(callBack); } /** * 获取设备列表 */ public void getFunctionList(HDLLinkCallBack callBack) { HDLSocket.getInstance().getFunctionList(callBack); } /** * 获取设备功能属性 * * @param sids * @param callBack */ public void getFunctionAttribute(List sids, HDLLinkCallBack callBack) { HDLSocket.getInstance().getFunctionAttribute(sids, callBack); } /** * 设备控制 * * @param request 控制状态参数 * @param callBack 结果回调 */ public void propertyDown(List request, HDLLinkCallBack callBack) { HDLSocket.getInstance().propertyDown(request, callBack); } /** * 读取状态 * * @param sids 请求参数 指定读取的设备sid列表 * @param callBack 回调 */ public void propertyRead(List sids, HDLLinkCallBack callBack) { HDLSocket.getInstance().propertyRead(sids, callBack); } /** * 获取场景列表 */ public void getSceneList(HDLLinkCallBack callBack) { HDLSocket.getInstance().getSceneList(callBack); } /** * 场景详情 * * @param sids 场景sid列表 * @param callBack 回调 */ public void getScene(List sids, HDLLinkCallBack callBack) { HDLSocket.getInstance().getScene(sids, callBack); } /** * 场景控制 * * @param sids 场景sid列表 * @param callBack 回调 */ public void controlScene(List sids, HDLLinkCallBack callBack) { HDLSocket.getInstance().controlScene(sids, callBack); } /** * 上报oid列表 * * @param request 设备信息 * @param callBack 回调 */ public void UploadOidList(ListUploadRequest request, HDLLinkCallBack callBack) { HDLSocket.getInstance().UploadOidList(request, callBack); } /** * 上报sid列表 * * @param requestList sid列表 * @param callBack 回调 */ public void UploadSidList(List requestList, HDLLinkCallBack callBack) { HDLSocket.getInstance().UploadSidList(requestList, callBack); } /** * 获取房间列表 */ public void getRoomList(HDLLinkCallBack callBack) { HDLSocket.getInstance().getRoomList(callBack); } /** * 房间绑定关系列表获取 * * @param uid 房间uid列表 * @param callBack 回调 */ public void getRoomBindList(List uid, HDLLinkCallBack callBack) { HDLSocket.getInstance().getRoomBindList(uid, callBack); } /** * 获取自动化列表 */ public void getLogicList(HDLLinkCallBack callBack) { HDLSocket.getInstance().getLogicList(callBack); } /** * ⾃动化启⽤禁⽤ * * @param sid 自动化sid * @param enable true=启⽤ false=禁⽤ * @param callBack 回调 */ public void editEnableLogic(String sid, boolean enable, HDLLinkCallBack callBack) { HDLSocket.getInstance().editEnableLogic(sid, enable, callBack); } /** * 通用UDP发送指令 * 1秒没响应就让他重新发送,重试3次 * * @param topic 发送数据 * @param bodyStr body内容 * @param callBack 回调 */ public void udpSendMsg(String topic, String bodyStr, HDLLinkResponseCallBack callBack) { HDLAuthSocket.getInstance().udpSendMsg(topic, bodyStr, false, callBack); } /** * 通用广播UDP发送指令 * 1秒没响应就让他重新发送,重试3次 * * @param topic 发送数据 * @param bodyStr body内容 * @param callBack 回调 */ public void udpBroadcastSendMsg(String topic, String bodyStr, HDLLinkResponseCallBack callBack) { HDLAuthSocket.getInstance().udpSendMsg(topic, bodyStr, true, callBack); } /** * 通用TCP发送指令 * 1秒没响应就让他重新发送,重试3次 * * @param topic 发送数据 * @param bodyStr body内容 * @param callBack 回调 */ public void tcpSendMsg(String topic, String bodyStr, HDLLinkCallBack callBack) { HDLAuthSocket.getInstance();//通过这个可以先初始化UDP监听事件 HDLSocket.getInstance().tcpSendMsg(topic, bodyStr, callBack); } /** * 通用发送指令 只发一次,不监听回复,不重发 * * @param topic 发送数据 * @param bodyStr 回复的主题 */ public void udpSendMsg(String topic, String bodyStr) { HDLAuthSocket.getInstance().udpSendMsg(topic, bodyStr, false); } /** * 通用广播发送指令 只发一次,不监听回复,不重发 * * @param topic 发送数据 * @param bodyStr 回复的主题 */ public void udpBroadcastSendMsg(String topic, String bodyStr) { HDLAuthSocket.getInstance().udpSendMsg(topic, bodyStr, true); } /** * 通用TCP发送指令 只发一次,不监听回复,不重发 * * @param topic 发送数据 * @param bodyStr 回复的主题 */ public void tcpSendMsg(String topic, String bodyStr) { HDLAuthSocket.getInstance();//通过这个可以先初始化UDP监听事件 HDLSocket.getInstance().tcpSendMsg(topic, bodyStr); } }