From a03799e08e7cc9b984b89cd125fd01e31f78486d Mon Sep 17 00:00:00 2001 From: JLChen <551775569@qq.com> Date: 星期四, 02 十二月 2021 09:44:20 +0800 Subject: [PATCH] 2021-12-02 1.增加网关认证错误 --- HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java | 232 ++++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 163 insertions(+), 69 deletions(-) diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java index 601806f..0fb853c 100644 --- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java @@ -1,24 +1,29 @@ package com.hdl.sdk.connect.socket; import android.text.TextUtils; -import android.util.Log; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import com.hdl.sdk.common.event.EventDispatcher; import com.hdl.sdk.common.event.EventListener; -import com.hdl.sdk.connect.bean.AuthenticateResponseBean; +import com.hdl.sdk.common.exception.HDLLinkCode; +import com.hdl.sdk.common.exception.HDLLinkException; +import com.hdl.sdk.common.utils.LogUtils; +import com.hdl.sdk.connect.bean.response.AuthenticateResponse; +import com.hdl.sdk.connect.bean.response.NetworkAccessBroadcastResponse; +import com.hdl.sdk.connect.callback.BaseCallBack; +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.config.TopicConstant; import com.hdl.sdk.common.utils.IdUtils; import com.hdl.sdk.common.utils.IpUtils; import com.hdl.sdk.common.utils.gson.GsonConvert; -import com.hdl.sdk.connect.bean.AuthenticateRequest; -import com.hdl.sdk.connect.bean.AuthenticateRequest.AuthenticateDeviceInfoBean; -import com.hdl.sdk.connect.bean.BaseLocalResponse; -import com.hdl.sdk.connect.bean.DeviceControlRequest; -import com.hdl.sdk.connect.bean.GatewaySearchBean; +import com.hdl.sdk.connect.bean.request.AuthenticateRequest; +import com.hdl.sdk.connect.bean.response.BaseLocalResponse; +import com.hdl.sdk.connect.bean.request.DeviceControlRequest; +import com.hdl.sdk.connect.bean.response.GatewaySearchBean; import com.hdl.sdk.connect.bean.LinkRequest; import com.hdl.sdk.connect.bean.LinkResponse; import com.hdl.sdk.connect.protocol.LinkMessageDecoder; @@ -27,10 +32,9 @@ import com.hdl.sdk.socket.SocketOptions; import com.hdl.sdk.socket.client.UdpClient; import com.hdl.sdk.socket.codec.MessagePipeLine; +import com.hdl.sdk.socket.listener.SendListener; import java.io.UnsupportedEncodingException; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; import java.util.List; import static com.hdl.sdk.common.config.TopicConstant.DEIVCE_AUTH_REQUEST; @@ -41,23 +45,26 @@ * @Description : HDLAuthSocket */ public class HDLAuthSocket { + private static final String TAG = "HDLAuth"; /** * udp榛樿绔彛 */ private static final int UDP_PORT = 8585; private static SocketBoot updBoot; +// private EventListener authEvent; + /** + * udp榛樿缁勬挱ip + */ + private static final String UDP_GROUP_IP = "239.0.168.188"; + /** * instance */ private volatile static HDLAuthSocket instance; - public interface CallBack { - - void onError(String error); - - void onSuccess(String msg); - - } +// public interface CallBack extends BaseCallBack { +// void onSuccess(String msg); +// } /** * getInstance @@ -94,24 +101,42 @@ } /** - * 寮�濮嬪叆缃戝強璁よ瘉璇锋眰 + * 寮�濮嬬洃鍚拰鍙戣捣鍏ョ綉鍙婅璇佽姹� * * @param request 璁よ瘉璇锋眰淇℃伅 * @param callBack 缁撴灉鍥炶皟 */ - public void startAuthenticateRequest(AuthenticateRequest request, CallBack callBack) { + public void startAuthenticateRequest(AuthenticateRequest request, HDLLinkCallBack callBack) { + HDLLinkConfig.getInstance().clearConfig(); //1.鍚姩Socket 寮�鍚洃鍚� getUdpBoot(IpUtils.getBroadcastAddress()); - //鐩戝惉缃戝叧骞挎挱鐨勫叆缃戞寚浠� + //2.鏋勫缓鐩戝惉Listener +// authEvent = + //3.鐩戝惉缃戝叧骞挎挱鐨勫叆缃戞寚浠� EventDispatcher.getInstance().register(TopicConstant.GATEWAY_AUTH_BROADCAST, new EventListener() { @Override public void onMessage(Object msg) { - + NetworkAccessBroadcastResponse bean = getNetworkAccessBroadcastResponse(msg); + if(bean != null){ + LogUtils.i(TAG, "缃戝叧鍏ョ綉骞挎挱IP: " + bean.getIPAddress()); + String ipStr = bean.getIPAddress(); + if(!TextUtils.isEmpty(ipStr)){ + sendAuthenticateRequest(ipStr, request, callBack); + } + } //绉婚櫎鐩戝惉 -// EventDispatcher.getInstance().remove(this); + EventDispatcher.getInstance().remove(TopicConstant.GATEWAY_AUTH_BROADCAST); + LogUtils.i(TAG, "绉婚櫎鐩戝惉 authEvent"); } }); + } + /** + * 缁撴潫鐩戝惉鍏ョ綉鍙婅璇佸箍鎾� + */ + public void endAuthenticateRequest(){ + //绉婚櫎鐩戝惉 + EventDispatcher.getInstance().remove(TopicConstant.GATEWAY_AUTH_BROADCAST); } /** @@ -121,9 +146,9 @@ * @param request 璁よ瘉璇锋眰淇℃伅 * @param callBack 缁撴灉鍥炶皟 */ - public void sendAuthenticateRequest(String ip, AuthenticateRequest request, CallBack callBack) { + public void sendAuthenticateRequest(String ip, AuthenticateRequest request, HDLLinkCallBack callBack) { if (request == null) { - callBack.onError("request null"); + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_NULL_ERROR)); } String topic = DEIVCE_AUTH_REQUEST; Gson gs = new Gson(); @@ -134,24 +159,29 @@ @Override public void onSucceed(Object msg) { if(callBack == null) return; - AuthenticateResponseBean bean = getAuthenticateResponseBean(msg); + AuthenticateResponse bean = getAuthenticateResponseBean(msg); if(bean != null){ String localSecret = bean.getAuth().getLocalSecret(); String gatewayId = bean.getObjects().getGatewayID(); String ipAddress = bean.getObjects().getIPAddress(); - HDLLinkConfig.getInstance().saveConfig(localSecret,gatewayId,ipAddress); - callBack.onSuccess("Success"); + //鍒ゆ柇缃戝叧鏄惁宸茬粡娉ㄥ唽鍒颁簯绔� + if(TextUtils.isEmpty(localSecret) ||TextUtils.isEmpty(gatewayId)){ + //璁よ瘉澶辫触锛岀綉鍏虫湭娉ㄥ唽鍒颁簯绔� + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_AUTH_ERROR_GATEWAY_NOT_REGISTERED)); + }else{ + HDLLinkConfig.getInstance().saveConfig(localSecret,gatewayId,ipAddress); + callBack.onSuccess("璁よ瘉鎴愬姛"); + } }else{ - callBack.onSuccess("鍙傛暟寮傚父"); + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_ERROR)); } - } @Override public void onFailure() { - Log.i("TAG", "onFailure: "); + LogUtils.i(TAG, "onFailure: "); if(callBack == null) return; - callBack.onError("瓒呮椂"); + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_TIMEOUT_ERROR)); } }); } @@ -199,14 +229,7 @@ // sendAuthenticateRequest(ip, request, callBack); // } - public interface SearchGatewayCallBack { - /** - * 鎼滅储缁撴潫 - * - * @param error - */ - void onEnd(String error); - + public interface SearchGatewayCallBack extends BaseCallBack{ /** * 鎼滅储缃戝叧鎴愬姛 * @@ -232,17 +255,34 @@ } /** + * 缁勬挱鎼滅储鎸囧畾缃戝叧鏄惁鍦ㄧ嚎锛屾悳绱㈠埌鍒欒繑鍥炴寚瀹氱殑缃戝叧瀵硅薄 + * @param callBack 鍥炶皟 + */ + public void searchGatewayMulticast(SearchGatewayCallBack callBack) { + searchGateway(HDLLinkConfig.getInstance().getGatewayId(), UDP_GROUP_IP, callBack); + } + + /** + * 缁勬挱鎼滅储鎸囧畾缃戝叧鏄惁鍦ㄧ嚎锛屾悳绱㈠埌鍒欒繑鍥炴寚瀹氱殑缃戝叧瀵硅薄 + * @param callBack 鍥炶皟 + */ + public void searchGatewayBroadcast(SearchGatewayCallBack callBack) { + String ip = IpUtils.getBroadcastAddress(); + searchGateway(HDLLinkConfig.getInstance().getGatewayId(), ip, callBack); + } + + /** * 鎼滅储鎸囧畾缃戝叧鏄惁鍦ㄧ嚎锛屾悳绱㈠埌鍒欒繑鍥炴寚瀹氱殑缃戝叧瀵硅薄 * * @param gatewayId 缃戝叧id + * @param ip 鎺ユ敹鐩爣鐨刬p鍦板潃 * @param callBack 鍥炶皟 */ - public void searchGateway(String gatewayId, SearchGatewayCallBack callBack) { + public void searchGateway(String gatewayId, String ip, SearchGatewayCallBack callBack) { String time = String.valueOf(System.currentTimeMillis()); JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("id", IdUtils.getUUId()); jsonObject.addProperty("time_stamp", time); - String ip = IpUtils.getBroadcastAddress(); LinkRequest message = new LinkRequest(TopicConstant.GATEWAY_SEARCH, jsonObject.toString()); @@ -251,7 +291,7 @@ public void onSucceed(Object msg) { GatewaySearchBean searchBean = getGatewaySearchBean(msg); if (searchBean != null && searchBean.getGatewayId().contains(gatewayId)) { - Log.i("TAG", "onSuccess: "); + LogUtils.i(TAG, "onSuccess: "); HDLLinkConfig.getInstance().setCurrentGateway(searchBean); HDLLinkConfig.getInstance().setLocalEncrypt(searchBean.isLocalEncrypt()); callBack.onSuccess(searchBean); @@ -262,11 +302,76 @@ @Override public void onFailure() { - Log.i("TAG", "onFailure: "); - callBack.onEnd("瓒呮椂"); + LogUtils.i(TAG, "onFailure: "); + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_TIMEOUT_ERROR)); } }); } + + + + /** + * 璁惧鎺у埗 + */ + public void propertyDown(List<DeviceControlRequest> request, HDLLinkCallBack callBack) { + String time = String.valueOf(System.currentTimeMillis()); + final BaseLocalResponse<List<DeviceControlRequest>> data = new BaseLocalResponse<>(); + data.setId(IdUtils.getUUId()); + data.setTime_stamp(time); + data.setObjects(request); + String topic = HDLLinkConfig.getInstance().getFullTopic(TopicConstant.PROPERTY_DOWN); + LinkRequest message = new LinkRequest(topic, + GsonConvert.getGson().toJson(data)); + + String ip = IpUtils.getBroadcastAddress(); + HdlSocketHelper.send(getUdpBoot(ip), message, new HdlSocketHelper.HdlSocketListener() { + @Override + public void onSucceed(Object msg) { + if(callBack == null) return; + callBack.onSuccess("鎺у埗鎴愬姛"); + } + + @Override + public void onFailure() { + if(callBack == null) return; + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_CONTROL_FAILURE_ERROR)); + } + }); + + } + + /** + * 閫氱敤鍙戦�佹寚浠� + * 1绉掓病鍝嶅簲灏辫浠栭噸鏂板彂閫�,閲嶈瘯3娆� + * @param topic 鍙戦�佹暟鎹� + * @param bodyStr 鍥炲鐨勪富棰� + * @param callBack 鍥炶皟 + */ + public void udpSendMsg(String topic, String bodyStr, HDLLinkResponseCallBack callBack) { + if(TextUtils.isEmpty(topic) || TextUtils.isEmpty(bodyStr)) { + if(callBack != null){ + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_NULL_ERROR)); + } + return; + } + LinkRequest message = new LinkRequest(topic, bodyStr); + String ip = IpUtils.getBroadcastAddress(); + HdlSocketHelper.send(getUdpBoot(ip), message, new HdlSocketHelper.HdlSocketListener() { + @Override + public void onSucceed(Object msg) { + if(callBack == null) return; + callBack.onSuccess((LinkResponse) msg); + } + + @Override + public void onFailure() { + if(callBack == null) return; + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_TIMEOUT_ERROR)); + } + } + ); + } + private GatewaySearchBean getGatewaySearchBean(Object msg) { GatewaySearchBean searchBean = null; @@ -283,15 +388,14 @@ return searchBean; } - private AuthenticateResponseBean getAuthenticateResponseBean(Object msg) { - AuthenticateResponseBean mBean = null; + private AuthenticateResponse getAuthenticateResponseBean(Object msg) { + AuthenticateResponse mBean = null; if (msg instanceof LinkResponse) { LinkResponse linkResponse = (LinkResponse) msg; String data = linkResponse.getData(); if (!TextUtils.isEmpty(data)) { - AuthenticateResponseBean response = GsonConvert.getGson().fromJson(data, new TypeToken<AuthenticateResponseBean>() { + AuthenticateResponse response = GsonConvert.getGson().fromJson(data, new TypeToken<AuthenticateResponse>() { }.getType()); - mBean = response; } @@ -299,29 +403,19 @@ return mBean; } - /** - * 璁惧鎺у埗 - */ - public void propertyDown(List<DeviceControlRequest> request, HDLSocket.CallBack callBack) { + private NetworkAccessBroadcastResponse getNetworkAccessBroadcastResponse(Object msg){ + NetworkAccessBroadcastResponse mBean = null; + if (msg instanceof LinkResponse) { + LinkResponse linkResponse = (LinkResponse) msg; + String data = linkResponse.getData(); + if (!TextUtils.isEmpty(data)) { + NetworkAccessBroadcastResponse response = GsonConvert.getGson().fromJson(data, new TypeToken<NetworkAccessBroadcastResponse>() { + }.getType()); + mBean = response; + } - String time = String.valueOf(System.currentTimeMillis()); - final BaseLocalResponse<List<DeviceControlRequest>> data = new BaseLocalResponse<>(); - data.setId(IdUtils.getUUId()); - data.setTime_stamp(time); - data.setObjects(request); - String topic = HDLLinkConfig.getInstance().getFullTopic(TopicConstant.PROPERTY_DOWN); - LinkRequest message = new LinkRequest(topic, - GsonConvert.getGson().toJson(data)); - - String ip = IpUtils.getBroadcastAddress(); - HdlSocketHelper.send(getUdpBoot(ip), message, null); - - + } + return mBean; } - - - - - } -- Gitblit v1.8.0