| | |
| | | package com.hdl.sdk.connect.socket;
|
| | |
|
| | | import static com.hdl.sdk.connect.config.HDLLinkConfig.AUTHENTICATE_IS_DEVICEINFO_KEY;
|
| | |
|
| | | import android.os.Build;
|
| | | import android.text.TextUtils;
|
| | | import android.util.Log;
|
| | |
|
| | | import androidx.annotation.RequiresApi;
|
| | |
|
| | | import com.google.gson.JsonObject;
|
| | | import com.google.gson.reflect.TypeToken;
|
| | | import com.hdl.sdk.common.HDLSdk;
|
| | | import com.hdl.sdk.common.config.TopicConstant;
|
| | | import com.hdl.sdk.common.event.EventDispatcher;
|
| | | import com.hdl.sdk.common.event.EventListener;
|
| | |
| | | import com.hdl.sdk.common.exception.HDLLinkException;
|
| | | import com.hdl.sdk.common.utils.IdUtils;
|
| | | import com.hdl.sdk.common.utils.LogUtils;
|
| | | import com.hdl.sdk.common.utils.SPUtils;
|
| | | import com.hdl.sdk.common.utils.ThreadToolUtils;
|
| | | import com.hdl.sdk.common.utils.gson.GsonConvert;
|
| | | import com.hdl.sdk.connect.HDLLink;
|
| | | import com.hdl.sdk.connect.bean.LinkRequest;
|
| | | import com.hdl.sdk.connect.bean.LinkResponse;
|
| | | import com.hdl.sdk.connect.bean.LoginRequest;
|
| | | import com.hdl.sdk.connect.bean.request.AuthenticateRequest;
|
| | | import com.hdl.sdk.connect.bean.request.BroadcastRequest;
|
| | | import com.hdl.sdk.connect.bean.request.DeviceAuthRequest;
|
| | | import com.hdl.sdk.connect.bean.request.GatewayInfoRequest;
|
| | | import com.hdl.sdk.connect.bean.request.DeviceControlRequest;
|
| | | import com.hdl.sdk.connect.bean.request.FunctionAttributeRequest;
|
| | | import com.hdl.sdk.connect.bean.request.ListOidRequest;
|
| | | import com.hdl.sdk.connect.bean.request.ListOidRequest2;
|
| | | import com.hdl.sdk.connect.bean.request.ListSidRequest;
|
| | | import com.hdl.sdk.connect.bean.request.ListUploadRequest;
|
| | | import com.hdl.sdk.connect.bean.response.AuthenticateResponse;
|
| | | import com.hdl.sdk.connect.bean.request.LogicEnableRequest;
|
| | | import com.hdl.sdk.connect.bean.request.PropertyReadRequest;
|
| | | import com.hdl.sdk.connect.bean.response.BaseLocalCodeResponse;
|
| | | import com.hdl.sdk.connect.bean.response.BaseLocalResponse;
|
| | | import com.hdl.sdk.connect.bean.request.DeviceControlRequest;
|
| | | import com.hdl.sdk.connect.bean.request.FunctionAttributeRequest;
|
| | | import com.hdl.sdk.connect.bean.LinkRequest;
|
| | | import com.hdl.sdk.connect.bean.LinkResponse;
|
| | | import com.hdl.sdk.connect.bean.request.PropertyReadRequest;
|
| | | import com.hdl.sdk.connect.bean.response.DeviceInfoResponse;
|
| | | 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.connect.protocol.LinkMessageDecoder;
|
| | | import com.hdl.sdk.connect.protocol.LinkMessageEncoder;
|
| | | import com.hdl.sdk.connect.utils.AesUtil;
|
| | | import com.hdl.sdk.socket.SocketBoot;
|
| | | import com.hdl.sdk.socket.SocketOptions;
|
| | | import com.hdl.sdk.socket.client.IHeartbeat;
|
| | |
| | | import com.hdl.sdk.socket.listener.ConnectStatusListener;
|
| | | import com.hdl.sdk.socket.listener.SendListener;
|
| | |
|
| | | import java.lang.reflect.Method;
|
| | | import java.util.ArrayList;
|
| | | import java.util.Base64;
|
| | | import java.util.List;
|
| | | import java.util.concurrent.ScheduledExecutorService;
|
| | | import java.util.concurrent.TimeUnit;
|
| | |
| | | public void run() {
|
| | | while (true) {
|
| | | try {
|
| | | Thread.sleep(1000);
|
| | | // LogUtils.i("checkIfCertified=" + HDLLink.getInstance().checkIfCertified() + " getTcp().connected=" + getTcp().connected);
|
| | | Thread.sleep(5000);
|
| | | try {
|
| | | if (!HDLLink.getInstance().checkIfCertified() || (!TextUtils.isEmpty(getTcpIp()) && getTcp().connected)) {
|
| | | if (!HDLLink.getInstance().checkIfCertified()) {
|
| | | continue;
|
| | | }
|
| | |
|
| | | if (!TextUtils.isEmpty(getTcpIp()) && getTcp().connected) {
|
| | | continue;
|
| | | }
|
| | | } catch (Exception e) {
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | public SocketBoot getTcp() throws RuntimeException {
|
| | | if (TextUtils.isEmpty(getTcpIp())) {
|
| | | public synchronized SocketBoot getTcp() throws RuntimeException {
|
| | | String gatewayIpAddress = getTcpIp();
|
| | | if (TextUtils.isEmpty(gatewayIpAddress)) {
|
| | | LogUtils.e("请搜索网关");
|
| | | throw new RuntimeException("请搜索网关");
|
| | | }
|
| | | //如果没有初始化,或者网关IP更改了,就重新初始化
|
| | | if (tcpBoot == null || !getTcpOptions().getIp().equals(getTcpIp())) {
|
| | | tcpBoot = TcpClient.init(getTcpIp(), getTcpPort(), getTcpOptions());
|
| | | if (tcpBoot == null || !getTcpOptions().getIp().equals(gatewayIpAddress)) {
|
| | | tcpBoot = TcpClient.init(gatewayIpAddress, getTcpPort(), getTcpOptions());
|
| | | tcpBoot.SetHeartbeat(new IHeartbeat() {
|
| | | @Override
|
| | | public void heartbeat() {
|
| | |
|
| | | if (HDLLinkConfig.getInstance().getDeviceInfoBean() == null || HDLLinkConfig.getInstance().getDeviceInfoBean().getOID() == null) {
|
| | | LogUtils.i("DeviceInfoBean为空,需要设置才能正常心跳");
|
| | | return;
|
| | | }
|
| | |
|
| | | String time = String.valueOf(System.currentTimeMillis());
|
| | | JsonObject jsonObject = new JsonObject();
|
| | | jsonObject.addProperty("id", IdUtils.getUUId());
|
| | | jsonObject.addProperty("time_stamp", time);
|
| | | if (HDLLinkConfig.getInstance().getDeviceInfoBean().getOID() == null) {
|
| | | //不走从机入网,通过gatewayId发送
|
| | | if (HDLLinkConfig.getInstance().getGatewayId() == null) {
|
| | | return;
|
| | | }
|
| | | String topic = String.format(TopicConstant.HEARTBEAT, HDLLinkConfig.getInstance().getGatewayId());
|
| | | LinkRequest message = new LinkRequest(topic,
|
| | | jsonObject.toString());
|
| | | sendMsg(message.getSendBytes(), null, null, null);
|
| | |
|
| | | if (HDLLinkConfig.getInstance().getRequestBean() != null) {
|
| | | jsonObject.addProperty("mac", HDLLinkConfig.getInstance().getRequestBean().getMAC());
|
| | | } else {
|
| | | if (HDLLinkConfig.getInstance().getRequestBean() != null) {
|
| | | jsonObject.addProperty("mac", HDLLinkConfig.getInstance().getRequestBean().getMAC());
|
| | | }
|
| | | //走从机入网,通过oid发送
|
| | | String topic = String.format(TopicConstant.HEARTBEAT, HDLLinkConfig.getInstance().getDeviceInfoBean().getOID());
|
| | | LinkRequest message = new LinkRequest(topic,
|
| | | jsonObject.toString());
|
| | | sendMsg(message.getSendBytes(), null, null, null);
|
| | | }
|
| | |
|
| | | String topic = String.format(TopicConstant.HEARTBEAT, HDLLinkConfig.getInstance().getDeviceInfoBean().getOID());
|
| | |
|
| | | LinkRequest message = new LinkRequest(topic,
|
| | | jsonObject.toString());
|
| | | sendMsg(message.getSendBytes(), null, null, null);
|
| | | }
|
| | | });
|
| | | }
|
| | |
| | | }
|
| | |
|
| | | /**
|
| | | * 获取场景列表
|
| | | * 获取场景详情
|
| | | */
|
| | | public void getScene(List<String> sids, HDLLinkCallBack callBack) {
|
| | | if (!TextUtils.isEmpty(getGatewayId()) && !TextUtils.isEmpty(getTcpIp())) {
|
| | |
| | | final BaseLocalResponse<List<ListUploadRequest>> data = new BaseLocalResponse<>();
|
| | | data.setId(IdUtils.getUUId());
|
| | | data.setTime_stamp(time);
|
| | |
|
| | | //2023.10.18修改,上报oid列表增加parentOid
|
| | | if (request != null && !TextUtils.isEmpty(HDLLinkConfig.getInstance().getParentOid())) {
|
| | | request.setParentOid(HDLLinkConfig.getInstance().getParentOid());
|
| | | }
|
| | |
|
| | | List<ListUploadRequest> list = new ArrayList<>();
|
| | | list.add(request);
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * 获取房间列表
|
| | | */
|
| | | public void getRoomList(HDLLinkCallBack callBack) {
|
| | | if (!TextUtils.isEmpty(getGatewayId()) && !TextUtils.isEmpty(getTcpIp())) {
|
| | | String time = String.valueOf(System.currentTimeMillis());
|
| | | JsonObject jsonObject = new JsonObject();
|
| | | jsonObject.addProperty("id", IdUtils.getUUId());
|
| | | jsonObject.addProperty("time_stamp", time);
|
| | |
|
| | | String topic = String.format(TopicConstant.ROOM_LIST_GET, getGatewayId());
|
| | |
|
| | | LinkRequest message = new LinkRequest(topic,
|
| | | jsonObject.toString());
|
| | | String replyTopic = topic + "_reply";
|
| | | try {
|
| | | sendMsg(message.getSendBytes(), replyTopic, callBack, new SendListener() {
|
| | | @Override
|
| | | public void onSucceed() {
|
| | |
|
| | | }
|
| | |
|
| | | @Override
|
| | | public void onError() {
|
| | | if (callBack != null) {
|
| | | callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_GET_FUNCTION_LIST_ERROR));
|
| | | }
|
| | | }
|
| | | });
|
| | | } catch (Exception e) {
|
| | | if (callBack != null) {
|
| | | callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_GET_FUNCTION_LIST_ERROR));
|
| | | }
|
| | | }
|
| | | } else {
|
| | | if (callBack != null) {
|
| | | callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_UNAUTHORIZED_ERROR));
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * 房间绑定关系列表获取
|
| | | */
|
| | | public void getRoomBindList(List<String> uid, HDLLinkCallBack callBack) {
|
| | | if (!TextUtils.isEmpty(getGatewayId()) && !TextUtils.isEmpty(getTcpIp())) {
|
| | | String time = String.valueOf(System.currentTimeMillis());
|
| | | final BaseLocalResponse<List<String>> data = new BaseLocalResponse<>();
|
| | | data.setId(IdUtils.getUUId());
|
| | | data.setTime_stamp(time);
|
| | |
|
| | | data.setObjects(uid);
|
| | |
|
| | | String topic = String.format(TopicConstant.ROOM_BIND_LIST_GET, getGatewayId());
|
| | | LinkRequest message = new LinkRequest(topic,
|
| | | GsonConvert.getGson().toJson(data));
|
| | |
|
| | | String replyTopic = topic + "_reply";
|
| | | try {
|
| | | sendMsg(message.getSendBytes(), replyTopic, callBack, new SendListener() {
|
| | | @Override
|
| | | public void onSucceed() {
|
| | |
|
| | | }
|
| | |
|
| | | @Override
|
| | | public void onError() {
|
| | | if (callBack != null) {
|
| | | callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_GET_FUNCTION_LIST_ERROR));
|
| | | }
|
| | | }
|
| | | });
|
| | | } catch (Exception e) {
|
| | | if (callBack != null) {
|
| | | callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_GET_FUNCTION_LIST_ERROR));
|
| | | }
|
| | | }
|
| | | } else {
|
| | | if (callBack != null) {
|
| | | callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_UNAUTHORIZED_ERROR));
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * 获取自动化列表
|
| | | */
|
| | | public void getLogicList(HDLLinkCallBack callBack) {
|
| | | if (!TextUtils.isEmpty(getGatewayId()) && !TextUtils.isEmpty(getTcpIp())) {
|
| | | String time = String.valueOf(System.currentTimeMillis());
|
| | | JsonObject jsonObject = new JsonObject();
|
| | | jsonObject.addProperty("id", IdUtils.getUUId());
|
| | | jsonObject.addProperty("time_stamp", time);
|
| | |
|
| | | String topic = String.format(TopicConstant.LOGIC_LIST_GET, getGatewayId());
|
| | |
|
| | | LinkRequest message = new LinkRequest(topic,
|
| | | jsonObject.toString());
|
| | | String replyTopic = topic + "_reply";
|
| | | try {
|
| | | sendMsg(message.getSendBytes(), replyTopic, callBack, new SendListener() {
|
| | | @Override
|
| | | public void onSucceed() {
|
| | |
|
| | | }
|
| | |
|
| | | @Override
|
| | | public void onError() {
|
| | | if (callBack != null) {
|
| | | callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_GET_FUNCTION_LIST_ERROR));
|
| | | }
|
| | | }
|
| | | });
|
| | | } catch (Exception e) {
|
| | | if (callBack != null) {
|
| | | callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_GET_FUNCTION_LIST_ERROR));
|
| | | }
|
| | | }
|
| | | } else {
|
| | | if (callBack != null) {
|
| | | callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_UNAUTHORIZED_ERROR));
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * ⾃动化启⽤禁⽤
|
| | | *
|
| | | * @param sid 自动化sid
|
| | | * @param enable true=启⽤ false=禁⽤
|
| | | * @param callBack 回调
|
| | | */
|
| | | public void editEnableLogic(String sid, boolean enable, HDLLinkCallBack callBack) {
|
| | | if (!TextUtils.isEmpty(getGatewayId()) && !TextUtils.isEmpty(getTcpIp())) {
|
| | | String time = String.valueOf(System.currentTimeMillis());
|
| | | final BaseLocalResponse<List<LogicEnableRequest>> data = new BaseLocalResponse<>();
|
| | | data.setId(IdUtils.getUUId());
|
| | | data.setTime_stamp(time);
|
| | |
|
| | | List<LogicEnableRequest> list = new ArrayList<>();
|
| | | LogicEnableRequest request = new LogicEnableRequest(sid, enable);
|
| | | list.add(request);
|
| | |
|
| | | data.setObjects(list);
|
| | |
|
| | | String topic = String.format(TopicConstant.EDIT_LOGIC_ENABLE, getGatewayId());
|
| | | LinkRequest message = new LinkRequest(topic,
|
| | | GsonConvert.getGson().toJson(data));
|
| | |
|
| | | String replyTopic = topic + "_reply";
|
| | | try {
|
| | | sendMsg(message.getSendBytes(), replyTopic, callBack, new SendListener() {
|
| | | @Override
|
| | | public void onSucceed() {
|
| | |
|
| | | }
|
| | |
|
| | | @Override
|
| | | public void onError() {
|
| | | if (callBack != null) {
|
| | | callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR));
|
| | | }
|
| | | }
|
| | | });
|
| | | } catch (Exception e) {
|
| | | if (callBack != null) {
|
| | | callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR));
|
| | | }
|
| | | }
|
| | | } else {
|
| | | if (callBack != null) {
|
| | | callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR));
|
| | | }
|
| | | }
|
| | | }
|
| | |
|
| | | }
|