250408:新建ali socket连接
authorxiewei <892331662@qq.com>
Tue, 8 Apr 2025 10:20:50 +0000 (18:20 +0800)
committerxiewei <892331662@qq.com>
Tue, 8 Apr 2025 10:20:50 +0000 (18:20 +0800)
hssdk/src/main/java/com/zhixun/blesdk/hssdk/alisocket/SocketClient.java [new file with mode: 0644]
hssdk/src/main/java/com/zhixun/blesdk/hssdk/data/BleMsgSendHandler.java
hssdk/src/main/java/com/zhixun/blesdk/hssdk/data/ReceiverLooperThread.java

diff --git a/hssdk/src/main/java/com/zhixun/blesdk/hssdk/alisocket/SocketClient.java b/hssdk/src/main/java/com/zhixun/blesdk/hssdk/alisocket/SocketClient.java
new file mode 100644 (file)
index 0000000..d6e751d
--- /dev/null
@@ -0,0 +1,101 @@
+package com.zhixun.blesdk.hssdk.alisocket;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.net.SocketAddress;
+
+public class SocketClient {
+    private Socket socket = null;
+    private InputStream mInputStream = null;
+    private BufferedReader reader = null;
+    private PrintWriter writer = null;
+    private OnMessageReceivedListener messageListener;
+    private String serverIpAddress;
+    private int serverPort;
+
+    public void setServerIpAddress(String serverIpAddress) {
+        this.serverIpAddress = serverIpAddress;
+    }
+
+    public void setServerPort(int serverPort) {
+        this.serverPort = serverPort;
+    }
+
+    public void connect() {
+        try {
+            socket = new Socket();
+            SocketAddress socAddress = new InetSocketAddress(serverIpAddress, serverPort);
+            socket.connect(socAddress, 2000);
+            // 启动心跳线程
+            socket.setKeepAlive(true);
+            mInputStream = socket.getInputStream();
+            reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
+            writer = new PrintWriter(new OutputStreamWriter(socket.getOutputStream()), true);
+            startReadMsg();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public void startReadMsg() {
+        new Thread(new Runnable() {
+            @Override
+            public void run() {
+
+                byte[] arrayOfByte = new byte[1024];
+                try {
+                    while (!socket.isClosed()) {
+
+                        //方法三:基于字符的读取或基于字节的读取,如果bytesRead一直不返回-1,可以尝试替换以下方法
+                        if (mInputStream.available() > 0) {
+                            mInputStream.read(arrayOfByte);
+                            if (arrayOfByte.length > 0 && messageListener != null) {
+                                // Process the entire content at once
+                                messageListener.onMessageReceived(arrayOfByte);
+                            }
+                        }
+                    }
+                } catch (IOException e) {
+                    e.printStackTrace();
+                    // 处理连接中断的情况
+                    if (messageListener != null) {
+                        messageListener.onConnectionLost();
+                    }
+                }
+            }
+        }).start();
+    }
+
+
+    public void sendMessage(byte[] message) {
+        if (socket != null && socket.isConnected()) {
+            writer.println(message);
+        }
+    }
+
+    public void disConnection() {
+        try {
+            if (socket != null && !socket.isClosed()) {
+                socket.close();
+            }
+            reader.close();
+            writer.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    public interface OnMessageReceivedListener {
+        void onMessageReceived(byte[] message);
+
+        void onConnectionLost();
+    }
+
+
+}
index ea46835..b1cbf93 100644 (file)
@@ -15,6 +15,7 @@ import com.zhixun.blesdk.hssdk.entity.MsgBody;
 import com.zhixun.blesdk.hssdk.util.SobLog;
 
 import java.util.ArrayList;
+import java.util.Iterator;
 import java.util.Queue;
 import java.util.concurrent.ConcurrentLinkedQueue;
 
@@ -187,6 +188,7 @@ public class BleMsgSendHandler {
 //    private ArrayList<byte[]> msgList = new ArrayList<>();
     private final int MSG_SEND = 101;//发送数据
     private boolean isStart = false;
+    public boolean isCancleChat = false;
 //    private final int MSG_CHECKSENDMSG = 102;//检测普通数据
     private class MsgLooperThread extends Thread {
 
@@ -199,11 +201,25 @@ public class BleMsgSendHandler {
                     switch (msg.what) {
                         case MSG_SEND:
                             isStart = true;
+                            if(isCancleChat){
+                                Iterator<byte[]> iterator = queueMsg.iterator();
+                                while (iterator.hasNext()) {
+                                    byte[] element = iterator.next();
+                                    byte[] head = new byte[3];
+                                    System.arraycopy(element,0,head,0,3);
+                                    if (ByteTools.byteArrToHex(head).equals("73021F")) { // 如果是偶数
+                                        iterator.remove(); // 移除该元素
+                                    }
+                                }
+                                isCancleChat = false;
+                            }
+
                             byte[] data = queueMsg.poll();
                             if(data==null){
                                 mSendMsgHandle.sendEmptyMessageDelayed(MSG_SEND,40);
                                 return;
                             }
+
                             byte[] sendBytes = new byte[data.length-1];
                             System.arraycopy(data,1,sendBytes,0,sendBytes.length);
                             int channel = 0xFF & data[0];
index 8ebb763..8228daa 100644 (file)
@@ -572,6 +572,7 @@ public class ReceiverLooperThread extends Thread {
                                 if(iAiFunctionListener!=null){
                                     iAiFunctionListener.cancle();
                                 }
+                                BleMsgSendHandler.getInstance().isCancleChat = true;
 //                                PolymerizeAgent.getInstance().getAiAPI().cancleChat();
                                 break;
                             case TYPE_GET_WEAR_AUDIO: