| | |
| | | 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;
|
| | |
| | | */
|
| | | 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() {
|
| | |
| | |
|
| | | }
|
| | | };
|
| | | // 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("解析失败");
|
| | | // }
|
| | | // }
|
| | | //
|
| | | //
|
| | | // }
|
| | | // };
|
| | | }
|
| | |
|
| | | private static class SingletonInstance {
|
| | |
| | | }
|
| | |
|
| | |
|
| | | // 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;
|
| | | // }
|
| | |
|
| | | private SocketOptions getTcpOptions() {
|
| | | final SocketOptions options = new SocketOptions();
|
| | | final MessagePipeLine pipeLine = new MessagePipeLine();
|
| | | pipeLine.add(new LinkMessageDecoder());
|
| | | pipeLine.add(new LinkMessageEncoder());
|
| | | options.setHandleMessage(pipeLine);
|
| | | options.setEnabledHeartbeat(false);
|
| | | options.setEnabledHeartbeat(false);//是否开启心跳包发送检测
|
| | | // options.setHeartbeatTimeInterval(10*1000L);
|
| | | // options.setHeartbeatData("TCP");
|
| | | // options.setEnabledHeartbeat(true);//是否开启心跳包发送检测
|
| | | return options;
|
| | | }
|
| | |
|
| | | private int getUdpPort() {
|
| | | return UDP_PORT;
|
| | | }
|
| | |
|
| | | public int getTcpPort() {
|
| | | return TCP_PORT;
|
| | |
| | | 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();
|
| | | // }
|
| | | //
|
| | | // }
|
| | |
|
| | |
|
| | | /**
|
| | | * 获取设备列表
|
| | |
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * 通用TCP发送指令 只发一次,不监听回复,不重发
|
| | | *
|
| | | * @param topic 发送数据
|
| | | * @param bodyStr 回复的主题
|
| | | */
|
| | | public void tcpSendMsg(String topic, String bodyStr) {
|
| | | try {
|
| | | if (TextUtils.isEmpty(topic) || TextUtils.isEmpty(bodyStr)) {
|
| | | LogUtils.e("udpSendMsg", "参数不能为空");
|
| | | return;
|
| | | }
|
| | | LinkRequest message = new LinkRequest(topic, bodyStr);
|
| | | getTcp().sendMsg(message.getSendBytes());
|
| | | } catch (Exception e) {
|
| | | LogUtils.e("tcpSendMsg", "发送失败 :"+e.getMessage());
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * 发送指令
|
| | |
| | | @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());
|
| | | }
|
| | | threadPool.shutdownNow();
|
| | | }
|
| | | }
|
| | | };
|
| | |
| | | getTcp().sendMsg(data);
|
| | | } else {
|
| | | threadPool.shutdownNow();
|
| | | LogUtils.e("sendMsg eventListener remove");
|
| | | EventDispatcher.getInstance().remove(eventTag, eventListener);
|
| | | ThreadToolUtils.getInstance().runOnUiThread(new Runnable() {
|
| | | @Override
|
| | |
| | | }
|
| | | }, 1000, 500, TimeUnit.MILLISECONDS);
|
| | | EventDispatcher.getInstance().register(eventTag, eventListener);
|
| | | //先发送一次
|
| | | getTcp().sendMsg(data, new SendListener() {
|
| | | @Override
|
| | | public void onSucceed() {
|