package com.hdl.sdk.connect; import com.hdl.sdk.common.utils.ThreadToolUtils; import com.hdl.sdk.connect.bean.request.DeviceControlRequest; import com.hdl.sdk.connect.callback.HDLLinkCallBack; import com.hdl.sdk.connect.callback.HDLLinkResponseCallBack; import com.hdl.sdk.connect.config.HDLLinkConfig; import com.hdl.sdk.common.event.EventDispatcher; import com.hdl.sdk.common.event.EventListener; import com.hdl.sdk.connect.bean.request.AuthenticateRequest; import com.hdl.sdk.connect.socket.HDLAuthSocket; import com.hdl.sdk.connect.socket.HDLSocket; import java.util.List; import java.util.concurrent.TimeUnit; /** * Created by jlchen on 11/15/21. * * @Description : HDLLink */ public class HDLLink { /** * instance */ private static final HDLLink instance=new HDLLink(); /** * getInstance * * @return HDLLink */ public static HDLLink getInstance() { // if (instance == null) { // synchronized (HDLLink.class) { // if (instance == null) { // instance = new HDLLink(); // } // } // } return instance; } /** * 注册所有主题消息的监听 * @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); } /***********************三方设备和网关通信之前的认证流程****************************/ /** * 检测是否已经认证过 * 认证通过才能进行设备控制 * @return */ public boolean checkIfCertified(){ return HDLLinkConfig.getInstance().checkIfCertified(); } /** * 开始监听和发起入网及认证请求 * * @param request 认证请求信息 * @param callBack 结果回调 */ public void startAuthenticateRequest(AuthenticateRequest request, HDLLinkCallBack callBack) { 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 callBack 回调 // */ // public void startSearchAllGateway(HDLAuthSocket.SearchGatewayCallBack callBack) { // // } // // /** // * 暂停搜索网关 // */ // public void endSearchAllGateway() { // // } /***********************三方设备请先认证成功 再调用下面的接口和网关通信****************************/ /** * 组播搜索指定网关是否在线,搜索到则返回指定的网关对象 * @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 controlScene(List sids, HDLLinkCallBack callBack) { HDLSocket.getInstance().controlScene(sids, 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); } }