From 14de918a79943e4961b09fa01ed320c6cad41f2e Mon Sep 17 00:00:00 2001
From: wjc <1243177876@qq.com>
Date: 星期三, 28 六月 2023 17:14:51 +0800
Subject: [PATCH] Revert "Revert "Merge branch 'hxb' into wjc""

---
 HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/socket/client/TcpClient.java |  176 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 176 insertions(+), 0 deletions(-)

diff --git a/HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/socket/client/TcpClient.java b/HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/socket/client/TcpClient.java
new file mode 100644
index 0000000..d5e6f38
--- /dev/null
+++ b/HDLLinkLocalSdk/src/main/java/com/hdl/sdk/link/socket/client/TcpClient.java
@@ -0,0 +1,176 @@
+package com.hdl.sdk.link.socket.client;
+
+
+
+import com.hdl.sdk.link.common.utils.LogUtils;
+import com.hdl.sdk.link.common.utils.ThreadToolUtils;
+import com.hdl.sdk.link.core.protocol.LinkMessageDecoder;
+import com.hdl.sdk.link.socket.TcpSocketBoot;
+import com.hdl.sdk.link.socket.SocketOptions;
+import com.hdl.sdk.link.socket.annotation.ConnectStatus;
+import com.hdl.sdk.link.socket.bean.Packet;
+import com.hdl.sdk.link.socket.codec.IHandleMessage;
+import com.hdl.sdk.link.socket.listener.ConnectStatusListener;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.util.List;
+
+
+/**
+ * Created by Tong on 2021/9/15.
+ */
+public final class TcpClient implements IClient {
+
+
+    private SocketOptions socketOptions;
+
+    private final String ip;
+    private final int port;
+
+    private Socket mSocket;
+
+    private byte[] readBuffer = new byte[4*1024];
+
+    private TcpClient(String ip, int port, SocketOptions socketOptions) {
+        this.socketOptions = socketOptions;
+        this.ip = ip;
+        this.port = port;
+        socketOptions.setIp(ip);
+        socketOptions.setPort(port);
+    }
+
+    public static TcpSocketBoot init(String ip, int port, SocketOptions options) {
+         return new TcpSocketBoot(new TcpClient(ip, port, options));
+    }
+
+
+
+
+    @Override
+    public void connect() throws Exception {
+        mSocket = getSocket();
+        mSocket.connect(new InetSocketAddress(ip, port), 3 * 1000);
+        mSocket.setTcpNoDelay(true);
+        mSocket.setReuseAddress(true);
+//        mSocket.setKeepAlive(true);
+//        mSocket.setSoTimeout(12 * 1000);
+    }
+
+
+
+
+    @Override
+    public void disconnect() {
+        if (mSocket != null) {
+            try {
+                mSocket.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    @Override
+    public synchronized SocketOptions getOptions() {
+        if (socketOptions == null) {
+            socketOptions = new SocketOptions();
+        }
+        return socketOptions;
+    }
+
+    @Override
+    public void onHandleResponse() throws Exception {
+        final InputStream stream = getInputStream();
+        if (stream != null && getOptions() != null) {
+            int len = 0;
+
+            if ((len = stream.read(readBuffer)) == -1) {
+                throw new Exception("缃戝叧鏂紑");
+            }
+
+            byte[] bytes = new byte[len];
+            System.arraycopy(readBuffer, 0, bytes, 0, len);
+            socketOptions.getHandleMessage().read(new Packet(bytes, mSocket));
+        }
+    }
+
+    @Override
+    public synchronized void  sendMsg(byte[] msg) throws Exception {
+        final OutputStream outputStream = getOutStream();
+        if (outputStream != null && getOptions() != null) {
+            try {
+//                IHandleMessage handleMessage = getOptions().getHandleMessage();
+//                handleMessage.write(handleMessage.write(msg));
+                getOutStream().write(msg);
+
+            }finally {
+                outputStream.flush();
+            }
+        }
+    }
+
+
+    /**
+     * 澶勭悊杩炴帴鐘舵��
+     */
+    public void onConnectStatus(int status) {
+        ThreadToolUtils.getInstance().runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                final List<ConnectStatusListener> list = getOptions().getConnectStatusListener();
+                if (list != null && !list.isEmpty()) {
+                    for (ConnectStatusListener listener : list) {
+                        switch (status) {
+                            case ConnectStatus
+                                    .CONNECTING:
+                                listener.onConnecting();
+                                break;
+                            case ConnectStatus
+                                    .CONNECTED:
+                                listener.onConnected();
+                                break;
+                            case ConnectStatus
+                                    .DISCONNECT:
+                                listener.onConnectFailed();
+                                break;
+                        }
+                    }
+                }
+            }
+        });
+    }
+
+
+    private synchronized Socket getSocket() {
+        return new Socket();
+    }
+
+    private InputStream getInputStream() {
+        if (mSocket != null && mSocket.isConnected() && !mSocket.isClosed()) {
+            try {
+                return mSocket.getInputStream();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return null;
+    }
+
+
+    private OutputStream getOutStream() {
+        if (mSocket != null && mSocket.isConnected() && !mSocket.isClosed()) {
+            try {
+                return mSocket.getOutputStream();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return null;
+    }
+
+
+}

--
Gitblit v1.8.0