From: xiewei <892331662@qq.com> Date: Tue, 8 Apr 2025 10:20:50 +0000 (+0800) Subject: 250408:新建ali socket连接 X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=3b157ee8681f67e736a68bc9145d02f2575d9be1;p=mirrors%2Fhs-sdk.git 250408:新建ali socket连接 --- 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 index 0000000..d6e751d --- /dev/null +++ b/hssdk/src/main/java/com/zhixun/blesdk/hssdk/alisocket/SocketClient.java @@ -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(); + } + + +} diff --git a/hssdk/src/main/java/com/zhixun/blesdk/hssdk/data/BleMsgSendHandler.java b/hssdk/src/main/java/com/zhixun/blesdk/hssdk/data/BleMsgSendHandler.java index ea46835..b1cbf93 100644 --- a/hssdk/src/main/java/com/zhixun/blesdk/hssdk/data/BleMsgSendHandler.java +++ b/hssdk/src/main/java/com/zhixun/blesdk/hssdk/data/BleMsgSendHandler.java @@ -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 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 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]; diff --git a/hssdk/src/main/java/com/zhixun/blesdk/hssdk/data/ReceiverLooperThread.java b/hssdk/src/main/java/com/zhixun/blesdk/hssdk/data/ReceiverLooperThread.java index 8ebb763..8228daa 100644 --- a/hssdk/src/main/java/com/zhixun/blesdk/hssdk/data/ReceiverLooperThread.java +++ b/hssdk/src/main/java/com/zhixun/blesdk/hssdk/data/ReceiverLooperThread.java @@ -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: