From 8b66be08179b026cb0e601733dacd43de97e5b01 Mon Sep 17 00:00:00 2001 From: hxb <hxb@hdlchina.com.cn> Date: 星期二, 21 十二月 2021 10:20:34 +0800 Subject: [PATCH] 完善下网关上网重连功能及广播设备基本数据 --- HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLAuthSocket.java | 144 +++++++++++++++++++++++++++++++++++++---------- 1 files changed, 113 insertions(+), 31 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 1148624..a0dd4ba 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 @@ -107,6 +107,7 @@ /** * 鑾峰彇褰撳墠udp瀵硅薄锛屽鏋滀笉瀛樺湪灏卞垱寤� + * * @return 杩斿洖褰撳墠瀵硅薄 */ private UdpSocketBoot getUdpBoot() { @@ -177,30 +178,39 @@ String requestStr = gs.toJson(request); LinkRequest message = new LinkRequest(topic, requestStr); - HdlSocketHelper.send(getUdpBoot(), ip,UDP_PORT, message, new HdlSocketHelper.HdlSocketListener() { + HdlSocketHelper.sendUdp(getUdpBoot(), ip, UDP_PORT, message, new HdlSocketHelper.HdlSocketListener() { @Override public void onSucceed(Object msg) { if (callBack == null) return; try { AuthenticateResponse bean = getAuthenticateResponseBean(msg); if (bean != null) { - String localSecret = ""; - String gatewayId = ""; - String ipAddress = ""; - if(bean.getAuth() != null) { - localSecret = bean.getAuth().getLocalSecret(); - } - if(bean.getObjects() != null){ - gatewayId = bean.getObjects().getGatewayID(); - ipAddress = bean.getObjects().getIPAddress(); - } - //鍒ゆ柇缃戝叧鏄惁宸茬粡娉ㄥ唽鍒颁簯绔� - 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("璁よ瘉鎴愬姛"); + if (bean.getCode().equals("200")) { + String localSecret = ""; + String gatewayId = ""; + String ipAddress = ""; + if (bean.getAuth() != null) { + localSecret = bean.getAuth().getLocalSecret(); + } + if (bean.getObjects() != null) { + gatewayId = bean.getObjects().getGatewayID(); + ipAddress = bean.getObjects().getIPAddress(); + } + //鍒ゆ柇缃戝叧鏄惁宸茬粡娉ㄥ唽鍒颁簯绔� + 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 if (bean.getCode().equals("14013")){ + //璁よ瘉澶辫触锛岃MAC瀵瑰簲鐨勮澶囧瘑閽ヤ笉瀛樺湪 + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_AUTH_MAC_KEY_ERROR_)); + } else{ + //璁よ瘉澶辫触锛岄敊璇爜锛� + LogUtils.e("璁よ瘉澶辫触锛岄敊璇爜锛�" + bean.getCode()); + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_AUTH_ERROR)); } } else { callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_ERROR)); @@ -293,7 +303,7 @@ * @param callBack 鍥炶皟 */ public void searchGatewayMulticast(SearchGatewayCallBack callBack) { - searchGateway(HDLLinkConfig.getInstance().getGatewayId(), UDP_GROUP_IP,UDP_PORT, callBack); + searchGateway(HDLLinkConfig.getInstance().getGatewayId(), UDP_GROUP_IP, UDP_PORT, callBack); } /** @@ -302,8 +312,14 @@ * @param callBack 鍥炶皟 */ public void searchGatewayBroadcast(SearchGatewayCallBack callBack) { + if (!HDLLinkConfig.getInstance().checkIfCertified()) { + if (callBack != null) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_UNAUTHORIZED_ERROR)); + } + return; + } String ip = IpUtils.getBroadcastAddress(); - searchGateway(HDLLinkConfig.getInstance().getGatewayId(), ip,UDP_PORT, callBack); + searchGateway(HDLLinkConfig.getInstance().getGatewayId(), ip, UDP_PORT, callBack); } @@ -321,7 +337,7 @@ GsonConvert.getGson().toJson(data)); String ip = IpUtils.getBroadcastAddress(); - HdlSocketHelper.send(getUdpBoot(), ip,UDP_PORT, message, new HdlSocketHelper.HdlSocketListener() { + HdlSocketHelper.sendUdp(getUdpBoot(), ip, UDP_PORT, message, new HdlSocketHelper.HdlSocketListener() { @Override public void onSucceed(Object msg) { if (callBack == null) return; @@ -343,18 +359,30 @@ * * @param topic 鍙戦�佹暟鎹� * @param bodyStr 鍥炲鐨勪富棰� + * @param broadcast 鏄惁瑕佸箍鎾� * @param callBack 鍥炶皟 */ - public void udpSendMsg(String topic, String bodyStr, HDLLinkResponseCallBack callBack) { + public void udpSendMsg(String topic, String bodyStr,boolean broadcast, HDLLinkResponseCallBack callBack) { if (TextUtils.isEmpty(topic) || TextUtils.isEmpty(bodyStr)) { if (callBack != null) { callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_DATA_NULL_ERROR)); } return; } + + if (!HDLLinkConfig.getInstance().checkIfCertified()) { + if (callBack != null) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_UNAUTHORIZED_ERROR)); + } + return; + } + LinkRequest message = new LinkRequest(topic, bodyStr); String ip = HDLLinkConfig.getInstance().getIpAddress(); - HdlSocketHelper.send(getUdpBoot(), ip, UDP_PORT, message, new HdlSocketHelper.HdlSocketListener() { + if(broadcast) { + ip = IpUtils.getBroadcastAddress(); + } + HdlSocketHelper.sendUdp(getUdpBoot(), ip, UDP_PORT, message, new HdlSocketHelper.HdlSocketListener() { @Override public void onSucceed(Object msg) { if (callBack == null) return; @@ -375,15 +403,23 @@ * * @param topic 鍙戦�佹暟鎹� * @param bodyStr 鍥炲鐨勪富棰� + * @param broadcast 鏄惁骞挎挱 */ - public void udpSendMsg(String topic, String bodyStr) { + public void udpSendMsg(String topic, String bodyStr,boolean broadcast) { if (TextUtils.isEmpty(topic) || TextUtils.isEmpty(bodyStr)) { LogUtils.e("udpSendMsg", "鍙傛暟涓嶈兘涓虹┖"); return; } + if (!HDLLinkConfig.getInstance().checkIfCertified()) { + LogUtils.e("udpSendMsg", "鏈璇侊紝璇峰厛璁よ瘉"); + return; + } LinkRequest message = new LinkRequest(topic, bodyStr); - String ip = HDLLinkConfig.getInstance().getIpAddress();// IpUtils.getBroadcastAddress(); - getUdpBoot().sendMsg( ip,UDP_PORT,message.getSendBytes()); + String ip = HDLLinkConfig.getInstance().getIpAddress(); + if(broadcast) { + ip = IpUtils.getBroadcastAddress(); + } + HdlSocketHelper.sendUdpOne(getUdpBoot(), ip, UDP_PORT, message); } private GatewaySearchBean getGatewaySearchBean(Object msg) { @@ -476,8 +512,8 @@ } private void initListenerGatewayEvent() { - LogUtils.i( "鍒濆鍖栨案涔呯洃鍚綉鍏冲箍鎾簨浠讹紝涓嶇敤绉婚櫎姝や簨浠�"); - EventListener gatewayEvent = new EventListener() { + LogUtils.i("鍒濆鍖栨案涔呯洃鍚綉鍏冲箍鎾簨浠讹紝涓嶇敤绉婚櫎姝や簨浠�"); + EventListener gatewayEvent = new EventListener() { @Override public void onMessage(Object msg) { try { @@ -513,11 +549,11 @@ * 鎼滅储鎸囧畾缃戝叧鏄惁鍦ㄧ嚎锛屾悳绱㈠埌鍒欒繑鍥炴寚瀹氱殑缃戝叧瀵硅薄 * * @param gatewayId 缃戝叧id - * @param ipAddress 鐩爣鐨処P鍦板潃 - * @param port 鐩爣鐨勭鍙� + * @param ipAddress 鐩爣鐨処P鍦板潃 + * @param port 鐩爣鐨勭鍙� * @param callBack 鍥炶皟 */ - public void searchGateway(String gatewayId, String ipAddress,int port, SearchGatewayCallBack callBack) { + public void searchGateway(String gatewayId, String ipAddress, int port, SearchGatewayCallBack callBack) { this.searchGatewayId = gatewayId; this.mSearchGatewayCallBack = callBack; //閲嶇疆鍙傛暟 @@ -555,6 +591,7 @@ }).start(); } + /** * 娉ㄥ唽鎼滅储缃戝叧鐩戝惉 */ @@ -586,4 +623,49 @@ }); } + + /** + * 鎼滅储鍦ㄧ嚎鎵�鏈夌殑缃戝叧锛屽寘鎷綋鍓嶄綇瀹呯殑鍙婃病鏈夌粦瀹氳繃鍏跺畠浣忓畢鐨勭綉鍏� + * + * @param ipAddress 鐩爣鐨処P鍦板潃 + * @param port 鐩爣鐨勭鍙� + * @param callBack 鍥炶皟 + */ + public void searchGateway(String ipAddress, int port, SearchGatewayCallBack callBack) { +// this.searchGatewayId = gatewayId; +// this.mSearchGatewayCallBack = callBack; +// //閲嶇疆鍙傛暟 +// searchGatewayCount.set(0); +// isSearchGatewaySuccess.set(false); + 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()); + //娉ㄥ唽鎼滅储缃戝叧鐩戝惉 + registerSearchGatewayEvent(); + new Thread(new Runnable() { + @Override + public void run() { + while (searchGatewayCount.get() < 10 && (!isSearchGatewaySuccess.get())) { + try { + //鎼滅储缃戝叧 + searchGatewayCount.set(searchGatewayCount.get() + 1); + LogUtils.i("鎼滅储缃戝叧", "鎼滅储缃戝叧绗�" + searchGatewayCount.get() + "娆�"); + getUdpBoot().sendMsg(ipAddress, port, message.getSendBytes()); + Thread.sleep(1000L); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + if (!isSearchGatewaySuccess.get()) { + //鎼滅储10娆★紝鎸囧畾缃戝叧閮芥病鍥炲锛屽洖璋冭秴鏃� + callBackSearchGatewayTimeout(); + LogUtils.e("鎼滅储缃戝叧", "鎼滅储10娆★紝鎸囧畾缃戝叧閮芥病鍥炲锛屽洖璋冭秴鏃�"); + } + } + }).start(); + } } -- Gitblit v1.8.0