From af2cbc2a24b3724e7fc3e6b42e134b21a3144c75 Mon Sep 17 00:00:00 2001 From: hxb <hxb@hdlchina.com.cn> Date: 星期四, 17 二月 2022 15:33:19 +0800 Subject: [PATCH] 过滤掉非json数据不传给三方使用 --- HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java | 314 ++++++++++++++++----------------------------------- 1 files changed, 101 insertions(+), 213 deletions(-) diff --git a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java index 5f82461..57a322f 100644 --- a/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java +++ b/HDLSDK/hdl-connect/src/main/java/com/hdl/sdk/connect/socket/HDLSocket.java @@ -1,42 +1,38 @@ package com.hdl.sdk.connect.socket; import android.text.TextUtils; +import android.util.Log; import com.google.gson.JsonObject; -import com.google.gson.reflect.TypeToken; 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.HDLLinkCode; import com.hdl.sdk.common.exception.HDLLinkException; import com.hdl.sdk.common.utils.IdUtils; -import com.hdl.sdk.common.utils.IpUtils; 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.bean.request.BroadcastRequest; 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.response.GatewaySearchBean; 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.request.PropertyUpRequest; -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.connect.protocol.LinkMessageDecoder; import com.hdl.sdk.connect.protocol.LinkMessageEncoder; import com.hdl.sdk.socket.SocketBoot; import com.hdl.sdk.socket.SocketOptions; +import com.hdl.sdk.socket.client.IHeartbeat; import com.hdl.sdk.socket.client.TcpClient; -import com.hdl.sdk.socket.client.UdpClient; import com.hdl.sdk.socket.codec.MessagePipeLine; import com.hdl.sdk.socket.listener.ConnectStatusListener; import com.hdl.sdk.socket.listener.SendListener; -import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ScheduledExecutorService; @@ -50,46 +46,20 @@ */ public class HDLSocket { -// public interface CallBack extends BaseCallBack { -// void onResponse(String data); -// } -// -// /** -// * udp榛樿缁勬挱ip -// */ -// private static final String UDP_GROUP_IP = "239.0.168.188"; - - /** - * udp榛樿绔彛 - */ - private static final int UDP_PORT = 8585; - /** * tcp榛樿绔彛 */ private static final int TCP_PORT = 8586; - // private String tcpIp; -// private int tcpPort; - -// private int udpPort; -// private String udpIp; - -// private static SocketBoot updBoot; private SocketBoot tcpBoot; private ConnectStatusListener statusListener; - -// private EventListener searchEvent; -// private CallBack searchCallBack; -// private ScheduledExecutorService searchGatewayThread; -// private final AtomicInteger searchCount = new AtomicInteger(0); private HDLSocket() { statusListener = new ConnectStatusListener() { @Override public void onConnecting() { - + broadcastRequest(); } @Override @@ -102,43 +72,31 @@ } }; -// searchEvent = new EventListener() { -// @Override -// public void onMessage(Object msg) { -// try { -// if (msg instanceof LinkResponse) { -// LinkResponse linkResponse = (LinkResponse) msg; -// String data = linkResponse.getData(); -// if (!TextUtils.isEmpty(data)) { -// final BaseLocalResponse<GatewaySearchBean> response = GsonConvert.getGson().fromJson(data, new TypeToken<BaseLocalResponse<GatewaySearchBean>>() { -// }.getType()); -// GatewaySearchBean searchBean = response.getObjects(); -// if (searchBean != null) { -//// gatewayId = searchBean.getGatewayId(); -//// if (!TextUtils.isEmpty(gatewayId)) { -//// SPUtils.put(GATEWAY_KEY, gatewayId); -//// } -//// tcpIp = searchBean.getIp_address(); -//// if (!TextUtils.isEmpty(tcpIp)) { -//// SPUtils.put(TCP_IP_KEY, tcpIp); -//// } -// } -// -// if (searchCallBack != null) { -// searchCallBack.onResponse(linkResponse.toString()); -// } -// } -// -// } -// } catch (Exception e) { -// if (searchCallBack != null) { -// searchCallBack.onError("瑙f瀽澶辫触"); -// } -// } -// -// -// } -// }; + } + + /** + * 骞挎挱鑷韩淇℃伅缁欎富缃戝叧 + */ + private void broadcastRequest() { + String time = String.valueOf(System.currentTimeMillis()); + if (null == HDLLinkConfig.getInstance().getDeviceInfoBean()) { + LogUtils.i("DeviceInfoBean涓虹┖锛岃璁剧疆褰撳墠瀵硅薄"); + return; + } + BroadcastRequest request = new BroadcastRequest(IdUtils.getUUId(), time, HDLLinkConfig.getInstance().getDeviceInfoBean(), "200"); + HDLAuthSocket.getInstance().udpSendMsg(TopicConstant.BROADCAST, GsonConvert.getGson().toJson(request),true); + HDLAuthSocket.getInstance().udpSendMsg(TopicConstant.BROADCAST, GsonConvert.getGson().toJson(request), true, new HDLLinkResponseCallBack() { + @Override + public void onSuccess(LinkResponse msg) { + LogUtils.i("骞挎挱淇℃伅缁欎富缃戝叧鎴愬姛锛�"); + } + + @Override + public void onError(HDLLinkException e) { + + } + }); + HDLAuthSocket.getInstance().udpSendMsg(TopicConstant.BROADCAST, GsonConvert.getGson().toJson(request),true); } private static class SingletonInstance { @@ -149,33 +107,20 @@ return SingletonInstance.INSTANCE; } - -// private SocketOptions getUdpOptions() { -// final SocketOptions options = new SocketOptions(); -// final MessagePipeLine pipeLine = new MessagePipeLine(); -// pipeLine.add(new LinkMessageDecoder()); -// pipeLine.add(new LinkMessageEncoder()); -// options.setHandleMessage(pipeLine); -// options.setEnabledHeartbeat(false); -// return options; -// } - + SocketOptions options; private SocketOptions getTcpOptions() { - final SocketOptions options = new SocketOptions(); + if(null!=options){ + return options; + } + options = new SocketOptions(); final MessagePipeLine pipeLine = new MessagePipeLine(); pipeLine.add(new LinkMessageDecoder()); pipeLine.add(new LinkMessageEncoder()); options.setHandleMessage(pipeLine); - options.setEnabledHeartbeat(false);//鏄惁寮�鍚績璺冲寘鍙戦�佹娴� -// options.setHeartbeatTimeInterval(10*1000L); -// options.setHeartbeatData("TCP"); -// options.setEnabledHeartbeat(true);//鏄惁寮�鍚績璺冲寘鍙戦�佹娴� + options.addConnectStatusListener(statusListener); return options; } - private int getUdpPort() { - return UDP_PORT; - } public int getTcpPort() { return TCP_PORT; @@ -188,90 +133,6 @@ public String getGatewayId() { return HDLLinkConfig.getInstance().getGatewayId(); } - - -// private String getUdpIp() { -// if (TextUtils.isEmpty(udpIp)) { -// udpIp = UDP_GROUP_IP; -// } -// return udpIp; -// } - -// public void searchGateway() { -// searchGateway(null); -// } -// -// /** -// * 缁勬挱鎼滅储 -// */ -// public void searchGateway(CallBack callBack) { -//// gatewayId = "";//閲嶇疆缃戝叧ID -//// this.searchCallBack = callBack; -//// -//// if (searchGatewayThread != null) { -//// searchGatewayThread.shutdownNow(); -//// } -//// -//// -//// new Thread(new Runnable() { -//// @Override -//// public void run() { -//// while (TextUtils.isEmpty(gatewayId)) { -//// //鎼滅储缃戝叧 -//// searchGateway(IdUtils.getUUId(), searchEvent); -//// try { -//// Thread.sleep(1000L); -//// } catch (InterruptedException e) { -//// e.printStackTrace(); -//// } -//// } -//// } -//// }).start(); -// } -// -// -// /** -// * 閫氳繃缁勬挱鎼滅储缃戝叧 -// */ -// public void searchGateway(String msgId, EventListener eventListener) { -// searchGateway(getUdpIp(), getUdpPort(), msgId, eventListener); -// } -// -// /** -// * 閫氳繃骞挎挱鎼滅储缃戝叧 -// */ -// public void searchGatewayByBroadcast(String msgId, EventListener eventListener) { -// searchGateway(IpUtils.getBroadcastAddress(), getUdpPort(), msgId, eventListener); -// } -// -// /** -// * 榛樿鏄粍鎾悳绱㈢綉鍏� -// */ -// public void searchGateway(String ip, int port, String msgId, EventListener eventListener) { -// -// if (updBoot == null) { -// updBoot = UdpClient.init(ip, port, getUdpOptions()); -// updBoot.connect(); -// } -// -// -// String time = String.valueOf(System.currentTimeMillis()); -// JsonObject jsonObject = new JsonObject(); -// jsonObject.addProperty("id", msgId); -// jsonObject.addProperty("time_stamp", time); -// -// EventDispatcher.getInstance().registerIo(TopicConstant.GATEWAY_SEARCH_REPLY, eventListener); -// LinkRequest message = new LinkRequest(TopicConstant.GATEWAY_SEARCH, -// jsonObject.toString()); -// -// try { -// updBoot.sendMsg(message.getSendBytes()); -// } catch (UnsupportedEncodingException e) { -// e.printStackTrace(); -// } -// -// } - /** * 鑾峰彇璁惧鍒楄〃 @@ -547,11 +408,35 @@ public SocketBoot getTcp() throws RuntimeException { if (TextUtils.isEmpty(getTcpIp())) { + LogUtils.e("璇锋悳绱㈢綉鍏�"); throw new RuntimeException("璇锋悳绱㈢綉鍏�"); } - if (tcpBoot == null) { + //濡傛灉娌℃湁鍒濆鍖栵紝鎴栬�呯綉鍏矷P鏇存敼浜嗭紝灏遍噸鏂板垵濮嬪寲 + if (tcpBoot == null||!getTcpOptions().getIp().equals(getTcpIp())) { tcpBoot = TcpClient.init(getTcpIp(), 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); + + String topic = String.format(TopicConstant.HEARTBEAT, HDLLinkConfig.getInstance().getDeviceInfoBean().getOID()); + + LinkRequest message = new LinkRequest(topic, + jsonObject.toString()); + sendMsg(message.getSendBytes(), null, null, null); + } + }); } + return tcpBoot; } @@ -711,46 +596,49 @@ public void sendMsg(byte[] data, String eventTag, HDLLinkCallBack callBack, SendListener sendListener) { try { - final AtomicInteger sendCount = new AtomicInteger(0); + if(eventTag!=null) { + final AtomicInteger sendCount = new AtomicInteger(0); - final ScheduledExecutorService threadPool = ThreadToolUtils.getInstance().newScheduledThreadPool(1); - final EventListener eventListener = new EventListener() { - @Override - public void onMessage(Object msg) { - if (msg instanceof LinkResponse) { - LogUtils.e("sendMsg onSuccess"); - if (callBack != null) { - callBack.onSuccess(msg.toString()); - } - threadPool.shutdownNow(); - } - LogUtils.e("sendMsg eventListener remove"); - EventDispatcher.getInstance().remove(eventTag, this); - } - }; - - threadPool.scheduleWithFixedDelay(new Runnable() { - @Override - public void run() { - if (sendCount.get() < 3) { - sendCount.set(sendCount.get() + 1); - getTcp().sendMsg(data); - } else { - threadPool.shutdownNow(); - LogUtils.e("sendMsg eventListener remove"); - EventDispatcher.getInstance().remove(eventTag, eventListener); - ThreadToolUtils.getInstance().runOnUiThread(new Runnable() { - @Override - public void run() { - if (callBack != null) { - callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR)); - } + final ScheduledExecutorService threadPool = ThreadToolUtils.getInstance().newScheduledThreadPool(1); + final EventListener eventListener = new EventListener() { + @Override + public void onMessage(Object msg) { + if (msg instanceof LinkResponse) { + LogUtils.i("sendMsg onSuccess"); + threadPool.shutdownNow(); + LogUtils.i("sendMsg eventListener remove"); + EventDispatcher.getInstance().remove(eventTag, this); + if (callBack != null) { + callBack.onSuccess(msg.toString()); } - }); + } } - } - }, 1000, 500, TimeUnit.MILLISECONDS); - EventDispatcher.getInstance().register(eventTag, eventListener); + }; + + threadPool.scheduleWithFixedDelay(new Runnable() { + @Override + public void run() { + if (sendCount.get() < 3) { + sendCount.set(sendCount.get() + 1); + getTcp().sendMsg(data); + } else { + threadPool.shutdownNow(); + LogUtils.e("sendMsg eventListener remove"); + EventDispatcher.getInstance().remove(eventTag, eventListener); + ThreadToolUtils.getInstance().runOnUiThread(new Runnable() { + @Override + public void run() { + if (callBack != null) { + callBack.onError(HDLLinkException.getErrorWithCode(HDLLinkCode.HDL_SEND_ERROR)); + } + } + }); + } + } + }, 1000, 500, TimeUnit.MILLISECONDS); + EventDispatcher.getInstance().register(eventTag, eventListener); + } + //鍏堝彂閫佷竴娆� getTcp().sendMsg(data, new SendListener() { @Override public void onSucceed() { -- Gitblit v1.8.0