| | |
| | | * udp默认端口 |
| | | */ |
| | | private static final int UDP_PORT = 8585; |
| | | private static int BIND_UDP_PORT = 8584; |
| | | /** |
| | | * 因为考虑到使用一个端口,要支持接收多网关的数据,所以只允许使用一个 |
| | | */ |
| | |
| | | private synchronized UdpSocketBoot getUdpBoot() { |
| | | try { |
| | | if (udpSocketBoot == null) { |
| | | udpSocketBoot = UdpClient.init(UDP_PORT, getUdpOptions()); |
| | | //区分是8584还是8585 |
| | | BIND_UDP_PORT = HDLSdk.getInstance().getBindPort(); |
| | | udpSocketBoot = UdpClient.init(BIND_UDP_PORT, getUdpOptions()); |
| | | udpSocketBoot.bind(); |
| | | |
| | | LogUtils.i("初始化Socket udp"); |
| | |
| | | LogUtils.i("网关入网广播IP: " + bean.getIPAddress()); |
| | | if (!TextUtils.isEmpty(bean.getSlave_mac())) { |
| | | if (!bean.getSlave_mac().equals(request.getObjects().getDeviceMAC())) { |
| | | LogUtils.i("入网验证的mac和本机不一样,请求的MAC是"+bean.getSlave_mac()+" 本机的是"+request.getObjects().getDeviceMAC()); |
| | | LogUtils.i("入网验证的mac和本机不一样,请求的MAC是" + bean.getSlave_mac() + " 本机的是" + request.getObjects().getDeviceMAC()); |
| | | return; |
| | | } |
| | | } |
| | | //移除监听 |
| | | EventDispatcher.getInstance().remove(TopicConstant.GATEWAY_AUTH_BROADCAST); |
| | | HDLLinkConfig.getInstance().setIpAddress(bean.getIPAddress()); |
| | | if (!TextUtils.isEmpty(bean.getOID())) { |
| | | HDLLinkConfig.getInstance().setParentOid(bean.getOID()); |
| | | } |
| | | String ipStr = bean.getIPAddress(); |
| | | if (!TextUtils.isEmpty(ipStr)) { |
| | | sendAuthenticateRequest(ipStr, request, callBack); |
| | | } |
| | | } |
| | | |
| | | }catch (Exception e){ |
| | | LogUtils.e("入网验证异常",e.getMessage()); |
| | | } catch (Exception e) { |
| | | LogUtils.e("入网验证异常", e.getMessage()); |
| | | } |
| | | } |
| | | }); |
| | |
| | | |
| | | final GatewayInfoRequest request = new GatewayInfoRequest(); |
| | | AuthenticateRequest.AuthenticateDeviceInfoBean authenticateDeviceInfoBean = HDLLinkConfig.getInstance().getDeviceInfoBean(); |
| | | if (authenticateDeviceInfoBean == null) return; |
| | | request.setDevice_model(authenticateDeviceInfoBean.getDeviceModel()); |
| | | request.setDevice_mac(authenticateDeviceInfoBean.getDeviceMAC()); |
| | | request.setDevice_name(authenticateDeviceInfoBean.getDeviceName()); |
| | |
| | | |
| | | if (authenticateDeviceInfoBean.getSupplier() == null) { |
| | | AuthenticateRequest.RequestBean requestBean = HDLLinkConfig.getInstance().getRequestBean(); |
| | | request.setSupplier(requestBean.getSupplier()); |
| | | if (requestBean != null) { |
| | | request.setSupplier(requestBean.getSupplier()); |
| | | } |
| | | } |
| | | |
| | | request.setHw_version(authenticateDeviceInfoBean.getHw_version()); |
| | |
| | | String localSecret = ""; |
| | | String gatewayId = ""; |
| | | String ipAddress = ""; |
| | | String homeId=""; |
| | | String homeId = ""; |
| | | if (bean.getAuth() != null) { |
| | | localSecret = bean.getAuth().getLocalSecret(); |
| | | } |
| | | if (bean.getObjects() != null) { |
| | | gatewayId = bean.getObjects().getGatewayID(); |
| | | ipAddress = bean.getObjects().getIPAddress(); |
| | | homeId=bean.getObjects().getHomeId(); |
| | | homeId = bean.getObjects().getHomeId(); |
| | | } |
| | | if (ipAddress == null) { |
| | | ipAddress = bean.getIp_address(); |
| | | } |
| | | if(!TextUtils.isEmpty(homeId)){ |
| | | if (!TextUtils.isEmpty(homeId)) { |
| | | HDLLinkConfig.getInstance().setHomeId(homeId); |
| | | } |
| | | HDLLinkConfig.getInstance().setAuthBean(request.getAuth()); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 通用发送指令 |
| | | * 发送一次 |
| | | * |
| | | * @param topic 发送数据 |
| | | * @param bodyStr 回复的主题 |
| | | * @param broadcast 是否要广播 |
| | | * @param callBack 回调 |
| | | */ |
| | | public void udpSendMsgOneTime(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(); |
| | | if (broadcast) { |
| | | ip = IpUtils.getBroadcastAddress(); |
| | | } |
| | | HdlSocketHelper.sendUdp(getUdpBoot(), ip, UDP_PORT, message, "", 1, 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)); |
| | | } |
| | | } |
| | | ); |
| | | } |
| | | |
| | | /** |
| | | * 通用发送指令 只发一次,不监听回复,不重发 |
| | | * |
| | | * @param topic 发送数据 |
| | |
| | | HDLLinkConfig.getInstance().setCurrentGateway(searchBean);//设置当前网关 |
| | | if (mSearchGatewayCallBack != null) { |
| | | mSearchGatewayCallBack.onSuccess(searchBean); |
| | | HDLSocket.getInstance().isBroadcast = true; |
| | | HDLSocket.getInstance().getTcp(); |
| | | } |
| | | } |
| | | } |