| | |
| | |
|
| | | import com.hdl.sdk.common.event.EventDispatcher;
|
| | | import com.hdl.sdk.common.event.EventListener;
|
| | | import com.hdl.sdk.common.utils.LogUtils;
|
| | | import com.hdl.sdk.common.utils.ThreadToolUtils;
|
| | | import com.hdl.sdk.connect.bean.LinkRequest;
|
| | | import com.hdl.sdk.socket.SocketBoot;
|
| | |
| | |
|
| | | private ScheduledExecutorService sendThread;
|
| | |
|
| | | private String observeTopic;
|
| | |
|
| | | public interface HdlSocketListener {
|
| | | void onSucceed(Object msg);
|
| | |
|
| | | void onFailure();
|
| | | }
|
| | |
|
| | | private HdlSocketHelper(Long sendAwaitTime, int maxRetry, SocketBoot boot, LinkRequest linkRequest, String observeTopic, HdlSocketListener listener) {
|
| | | this.sendAwaitTime = sendAwaitTime;
|
| | | this.maxRetry = maxRetry;
|
| | | this.boot = boot;
|
| | | this.linkRequest = linkRequest;
|
| | | this.listener = listener;
|
| | | this.sendNumber = new AtomicInteger(0);
|
| | | eventListener = new EventListener() {
|
| | | @Override
|
| | | public void onMessage(Object msg) {
|
| | | isSend.set(true);
|
| | | if (listener != null) {
|
| | | listener.onSucceed(msg);
|
| | | }
|
| | | if (sendThread != null) {
|
| | | sendThread.shutdownNow();
|
| | | }
|
| | | EventDispatcher.getInstance().remove(eventListener);
|
| | | }
|
| | | };
|
| | | EventDispatcher.getInstance().register(observeTopic, eventListener);
|
| | | }
|
| | |
|
| | | private HdlSocketHelper(Long sendAwaitTime, int maxRetry, UdpSocketBoot udpSocketBoot,
|
| | |
| | | this.port = port;
|
| | | this.linkRequest = linkRequest;
|
| | | this.listener = listener;
|
| | | this.observeTopic = observeTopic;
|
| | | this.sendNumber = new AtomicInteger(0);
|
| | | eventListener = new EventListener() {
|
| | | @Override
|
| | |
| | | if (sendThread != null) {
|
| | | sendThread.shutdownNow();
|
| | | }
|
| | | EventDispatcher.getInstance().remove(eventListener);
|
| | | //移除监听
|
| | | removeListener();
|
| | | }
|
| | | };
|
| | | //注册监听
|
| | | registerListener();
|
| | | }
|
| | |
|
| | |
|
| | | /**
|
| | | * 注册监听
|
| | | */
|
| | | void registerListener() {
|
| | | if (!TextUtils.isEmpty(observeTopic)) {
|
| | | EventDispatcher.getInstance().register(observeTopic, eventListener);
|
| | | // LogUtils.i("HdlSocketHelper", "register event");
|
| | | }
|
| | | }
|
| | |
|
| | | public static void send(SocketBoot boot, LinkRequest linkRequest, String observeTopic, HdlSocketListener listener, Long sendAwaitTime, int maxRetry) {
|
| | | if (TextUtils.isEmpty(observeTopic)) {
|
| | | observeTopic = linkRequest.getTopic() + "_reply";
|
| | | /**
|
| | | * 移除监听
|
| | | */
|
| | | void removeListener() {
|
| | | if (!TextUtils.isEmpty(observeTopic)) {
|
| | | EventDispatcher.getInstance().remove(observeTopic, eventListener);
|
| | | // LogUtils.i("HdlSocketHelper", "remove event");
|
| | | }
|
| | | HdlSocketHelper socketHelper = new HdlSocketHelper(sendAwaitTime, maxRetry, boot, linkRequest, observeTopic, listener);
|
| | | socketHelper.send();
|
| | | }
|
| | |
|
| | | public static void send(SocketBoot boot, LinkRequest linkRequest, String observeTopic, HdlSocketListener listener) {
|
| | | send(boot, linkRequest, observeTopic, listener, DEF_SEND_TIMEOUT, DEF_MAX_RETRY);
|
| | | }
|
| | |
|
| | |
|
| | | public static void send(SocketBoot boot, LinkRequest linkRequest, HdlSocketListener listener) {
|
| | | send(boot, linkRequest, "", listener, DEF_SEND_TIMEOUT, DEF_MAX_RETRY);
|
| | | }
|
| | |
|
| | | public static void sendOne(SocketBoot boot, LinkRequest linkRequest, HdlSocketListener listener) {
|
| | | send(boot, linkRequest, "", listener, DEF_SEND_TIMEOUT, DEF_SEND_ONE);
|
| | | }
|
| | |
|
| | | /**
|
| | |
| | | * @param listener 回调
|
| | | */
|
| | | public static void sendUdp(UdpSocketBoot udpSocketBoot, String ipAddress ,int port, LinkRequest linkRequest, HdlSocketListener listener) {
|
| | | sendUdp(udpSocketBoot,ipAddress,port,linkRequest,null,DEF_MAX_RETRY,listener);
|
| | | sendUdp(udpSocketBoot, ipAddress, port, linkRequest, "", DEF_MAX_RETRY, listener);
|
| | | }
|
| | |
|
| | |
|
| | | /**
|
| | | * Udp的发送方法
|
| | |
| | | * @param linkRequest 发送的数据
|
| | | */
|
| | | public static void sendUdpOne(UdpSocketBoot udpSocketBoot, String ipAddress ,int port, LinkRequest linkRequest) {
|
| | | sendUdp(udpSocketBoot, ipAddress, port, linkRequest, null, DEF_SEND_ONE, null);
|
| | | HdlSocketHelper socketHelper = new HdlSocketHelper(DEF_SEND_TIMEOUT, DEF_SEND_ONE, udpSocketBoot, ipAddress, port, linkRequest, null, null);
|
| | | socketHelper.send();
|
| | | }
|
| | |
|
| | | private void send() {
|
| | |
| | | * 发送失败
|
| | | */
|
| | | private void notifyFailure() {
|
| | | EventDispatcher.getInstance().remove(eventListener);
|
| | | //移除监听
|
| | | removeListener();
|
| | | if (sendThread != null) {
|
| | | sendThread.shutdownNow();
|
| | | sendThread = null;
|