#
Junjie
2025-07-05 a757961fc5b8f5ee5b79cc30615bd22d321d0d72
src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
@@ -15,10 +15,9 @@
import com.zy.core.thread.ShuttleThread;
import lombok.extern.slf4j.Slf4j;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.MessageFormat;
import java.util.*;
@@ -30,12 +29,15 @@
    private DeviceConfig deviceConfig;
    private RedisUtil redisUtil;
    private Socket socket;
    private ServerSocket serverSocket;
    private static final boolean DEBUG = false;//调试模式
    private boolean fake = false;
    private boolean stopThread = false;
    public NyShuttleThread(DeviceConfig deviceConfig, RedisUtil redisUtil) {
        this.deviceConfig = deviceConfig;
        this.redisUtil = redisUtil;
        this.fake = deviceConfig.getFake();
    }
    @Override
@@ -46,7 +48,14 @@
        //监听消息
        Thread innerThread = new Thread(() -> {
            while (true) {
                if(stopThread) {
                    break;
                }
                System.out.println("read");
                try {
                    Thread.sleep(200);
                    listenSocketMessage();
                } catch (Exception e) {
                    e.printStackTrace();
@@ -58,6 +67,11 @@
        //执行指令
        Thread executeThread = new Thread(() -> {
            while (true) {
                if(stopThread) {
                    break;
                }
                System.out.println("executeThread");
                try {
                    DeviceMsgUtils deviceMsgUtils = null;
                    try {
@@ -79,6 +93,35 @@
            }
        });
        executeThread.start();
        if (this.fake) {
            Thread fakeThread = new Thread(() -> {
                try {
                    serverSocket = new ServerSocket(deviceConfig.getPort());
                    while (true) {
                        if(stopThread) {
                            break;
                        }
                        System.out.println("fakeThread");
                        Socket accept = serverSocket.accept();
                        handleClient(accept);
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }
            });
            fakeThread.start();
        }
    }
    private void handleClient(Socket socket) throws IOException {
        InputStream inputStream = socket.getInputStream();
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("test".getBytes());
        outputStream.flush();
        socket.close();
    }
    private void executeCommand(DeviceCommandMsgModel deviceCommandMsg) {
@@ -159,30 +202,6 @@
        }
    }
    @Override
    public boolean connect() {
        try {
            InetAddress address = InetAddress.getByName(deviceConfig.getIp());
            if (address.isReachable(10000)) {
                Socket socket = new Socket(deviceConfig.getIp(), deviceConfig.getPort());
                socket.setSoTimeout(10000);
                socket.setKeepAlive(true);
                this.socket = socket;
                log.info(MessageFormat.format("【{0}】四向穿梭车Socket链接成功 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), deviceConfig.getDeviceNo(), deviceConfig.getIp(), deviceConfig.getPort()));
            }
        } catch (Exception e) {
            OutputQueue.SHUTTLE.offer(MessageFormat.format("【{0}】四向穿梭车Socket链接失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), deviceConfig.getDeviceNo(), deviceConfig.getIp(), deviceConfig.getPort()));
            return false;
        }
        return true;
    }
    @Override
    public void close() {
    }
    public JSONObject parseSocketResult(JSONObject data) {
        JSONObject device = new JSONObject();
@@ -231,4 +250,43 @@
        extend.put("countQuantity", data.getInteger("countQuantity"));
        return device;
    }
    @Override
    public boolean connect() {
        try {
            InetAddress address = InetAddress.getByName(deviceConfig.getIp());
            if (address.isReachable(10000)) {
                Socket socket = new Socket(deviceConfig.getIp(), deviceConfig.getPort());
                socket.setSoTimeout(10000);
                socket.setKeepAlive(true);
                this.socket = socket;
                log.info(MessageFormat.format("【{0}】四向穿梭车Socket链接成功 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), deviceConfig.getDeviceNo(), deviceConfig.getIp(), deviceConfig.getPort()));
            }
        } catch (Exception e) {
            OutputQueue.SHUTTLE.offer(MessageFormat.format("【{0}】四向穿梭车Socket链接失败 ===>> [id:{1}] [ip:{2}] [port:{3}]", DateUtils.convert(new Date()), deviceConfig.getDeviceNo(), deviceConfig.getIp(), deviceConfig.getPort()));
            return false;
        }
        return true;
    }
    @Override
    public void close() {
    }
    @Override
    public DeviceConfig getDeviceConfig() {
        return this.deviceConfig;
    }
    @Override
    public void stopThread() {
        this.stopThread = true;
    }
    @Override
    public boolean isFake() {
        return this.fake;
    }
}