| | |
| | |
|
| | | import androidx.collection.ArrayMap;
|
| | |
|
| | | import com.google.gson.JsonObject;
|
| | | import com.hdl.sdk.common.config.TopicConstant;
|
| | | import com.hdl.sdk.common.utils.IdUtils;
|
| | | import com.hdl.sdk.common.utils.LogUtils;
|
| | | import com.hdl.sdk.common.utils.ThreadToolUtils;
|
| | | import com.hdl.sdk.socket.annotation.ConnectStatus;
|
| | | import com.hdl.sdk.socket.client.IClient;
|
| | | import com.hdl.sdk.socket.client.IHeartbeat;
|
| | | import com.hdl.sdk.socket.listener.SendListener;
|
| | |
|
| | | import java.net.ConnectException;
|
| | | import java.util.Date;
|
| | | import java.util.concurrent.BlockingQueue;
|
| | | import java.util.concurrent.ExecutorService;
|
| | | import java.util.concurrent.LinkedBlockingDeque;
|
| | |
| | | private ExecutorService connectThread;
|
| | | private ExecutorService sendThread;
|
| | | private ExecutorService receiveThread;
|
| | | private ExecutorService heartbeatThread;
|
| | |
|
| | | private final IClient client;
|
| | | private IHeartbeat iHeartbeat;
|
| | | public void SetHeartbeat(IHeartbeat iHeartbeat){
|
| | | this.iHeartbeat=iHeartbeat;
|
| | | }
|
| | | /**
|
| | | * 当前接收到数据的时间
|
| | | */
|
| | | private static long time=System.currentTimeMillis();
|
| | |
|
| | | /**
|
| | | * tcp是否已经连接
|
| | |
| | | initConnectThread();
|
| | | initReceiveThread();
|
| | | initSendThread();
|
| | | initHeartbeat();
|
| | | }
|
| | |
|
| | | /**
|
| | |
| | | try {
|
| | | LogUtils.i("TCP连接");
|
| | | client.onConnectStatus(ConnectStatus.CONNECTING);
|
| | | Thread.sleep(700);
|
| | | Thread.sleep(1000);
|
| | | client.connect();
|
| | | connected=true;
|
| | | LogUtils.i("TCP连接成功");
|
| | | client.onConnectStatus(ConnectStatus.CONNECTED);
|
| | | }catch(Exception e) {
|
| | | LogUtils.e("连接异常"+e.getMessage());
|
| | |
| | | if (connected) {
|
| | | //读取数据
|
| | | client.onHandleResponse();
|
| | | time= System.currentTimeMillis();
|
| | | } else {
|
| | | try {
|
| | | Thread.sleep(1000);
|
| | |
| | | if (!connected) {
|
| | | reconect();
|
| | | }
|
| | | Thread.sleep(10*1000);
|
| | | Thread.sleep(3*1000);
|
| | | } catch (Exception e) {
|
| | |
|
| | | LogUtils.e("定时连接失败:" + e.getMessage());
|
| | | }
|
| | | }
|
| | | }
|
| | | });
|
| | | }
|
| | | }
|
| | |
|
| | | /**
|
| | | * 初始化重新心跳线程
|
| | | */
|
| | | private void initHeartbeat() {
|
| | | if (heartbeatThread == null) {
|
| | | heartbeatThread = ThreadToolUtils.getInstance().newFixedThreadPool(1);
|
| | | heartbeatThread.execute(new Runnable() {
|
| | | @Override
|
| | | public void run() {
|
| | | while (true) {
|
| | | try {
|
| | | //10秒
|
| | | if (connected && 10 * 1000 < (System.currentTimeMillis() - time)) {
|
| | | time = System.currentTimeMillis();
|
| | | //心跳检测
|
| | | if (iHeartbeat != null)
|
| | | iHeartbeat.heartbeat();
|
| | | }
|
| | | Thread.sleep(1000);
|
| | | } catch (Exception e) {
|
| | | LogUtils.e("定时心跳检测网关异常:" + e.getMessage());
|
| | | }
|
| | | }
|
| | | }
|
| | | });
|
| | | }
|
| | | }
|
| | |
|
| | |
|
| | | /**
|
| | | * 重新连接
|
| | | */
|
| | |
| | | }
|
| | | mMessageQueue.put(request);
|
| | | } catch (Exception e) {
|
| | |
|
| | | LogUtils.e("发送数据失败:" + e.getMessage());
|
| | | }
|
| | | }
|
| | |
|