| | |
| | | package com.hdl.sdk.socket;
|
| | |
|
| | | import android.text.TextUtils;
|
| | | import android.util.Log;
|
| | |
|
| | | 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.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.ConcurrentHashMap;
|
| | | import java.util.concurrent.ConcurrentMap;
|
| | | import java.util.concurrent.ExecutorService;
|
| | | import java.util.concurrent.LinkedBlockingDeque;
|
| | | import java.util.concurrent.ScheduledExecutorService;
|
| | | import java.util.concurrent.TimeUnit;
|
| | | import java.util.concurrent.atomic.AtomicBoolean;
|
| | | import java.util.concurrent.atomic.AtomicInteger;
|
| | |
|
| | | /**
|
| | | * Created by Tong on 2021/9/26.
|
| | |
| | |
|
| | | private final IClient client;
|
| | | private IHeartbeat iHeartbeat;
|
| | |
|
| | | public void SetHeartbeat(IHeartbeat iHeartbeat){
|
| | | this.iHeartbeat=iHeartbeat;
|
| | | }
|
| | |
|
| | | /**
|
| | | * 当前接收到数据的时间
|
| | | */
|
| | |
| | |
|
| | | private final BlockingQueue<SocketRequest> mMessageQueue = new LinkedBlockingDeque<>();
|
| | |
|
| | | private final ArrayMap<String, SendListener> sendMap = new ArrayMap<>();
|
| | | private final ConcurrentMap<String, SendListener> sendMap = new ConcurrentHashMap<>();
|
| | |
|
| | | public SocketBoot(IClient client) {
|
| | | this.client = client;
|
| | |
| | | public void run() {
|
| | | while (true) {
|
| | | try {
|
| | | if (!connected) {
|
| | | Thread.sleep(200);
|
| | | continue;
|
| | | }
|
| | | SocketRequest socketRequest = mMessageQueue.take();
|
| | | // final String sendStr = new String(socketRequest.getData(), 0, socketRequest.getData().length);
|
| | | // LogUtils.i("发送数据:" + sendStr);
|
| | | if (System.currentTimeMillis() - socketRequest.getTime() > 5000) {
|
| | | continue;
|
| | | }
|
| | | final String action = socketRequest.getAction();
|
| | | try {
|
| | |
|
| | | client.sendMsg(socketRequest.getData());
|
| | | if (!TextUtils.isEmpty(action)) {
|
| | | SendListener sendListener = sendMap.get(action);
|
| | |
| | |
|
| | | /**
|
| | | * 发送无需回调
|
| | | *
|
| | | * @param msg 发送的数据
|
| | | */
|
| | | public void sendMsg(byte[] msg) {
|