diff --git a/src/main/java/vip/fubuki/playersync/sync/chat/ChatSyncClient.java b/src/main/java/vip/fubuki/playersync/sync/chat/ChatSyncClient.java index 8915bf9..e308615 100644 --- a/src/main/java/vip/fubuki/playersync/sync/chat/ChatSyncClient.java +++ b/src/main/java/vip/fubuki/playersync/sync/chat/ChatSyncClient.java @@ -23,9 +23,6 @@ public class ChatSyncClient { private static final int RECONNECT_DELAY = 5000; private static final int MAX_RECONNECT_ATTEMPTS = 10; - private static volatile long lastHeartbeat = System.currentTimeMillis(); - private static final long HEARTBEAT_INTERVAL = 15000; - public void run() { int reconnectAttempts = 0; @@ -48,28 +45,19 @@ public class ChatSyncClient { 15000 ); - clientSocket.setSoTimeout(30000); + clientSocket.setSoTimeout(0); out = new PrintWriter(new BufferedWriter( new OutputStreamWriter(clientSocket.getOutputStream())), true); PlayerSync.LOGGER.info("Successfully connected to chat server"); reconnectAttempts = 0; - lastHeartbeat = System.currentTimeMillis(); - - startHeartbeatMonitor(); BufferedReader in = new BufferedReader( new InputStreamReader(clientSocket.getInputStream())); String serverMessage; while (running && (serverMessage = in.readLine()) != null) { - lastHeartbeat = System.currentTimeMillis(); - - if ("".equals(serverMessage)) { - continue; - } - PlayerSync.LOGGER.info("Received message from chat server: " + serverMessage); Component textComponents = Component.nullToEmpty(serverMessage); if(playerList != null){ @@ -104,32 +92,6 @@ public class ChatSyncClient { } } - private void startHeartbeatMonitor() { - Thread heartbeatThread = new Thread(() -> { - while (running && clientSocket != null && !clientSocket.isClosed()) { - try { - Thread.sleep(10000); // 每10秒检查一次 - - long now = System.currentTimeMillis(); - if (now - lastHeartbeat > HEARTBEAT_INTERVAL) { - PlayerSync.LOGGER.warn("No heartbeat for {}ms, sending test message", - now - lastHeartbeat); - - // 发送测试消息检查连接 - if (out != null) { - out.println(""); - } - } - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - break; - } - } - }, "ChatSync-Heartbeat"); - heartbeatThread.setDaemon(true); - heartbeatThread.start(); - } - private void closeConnection() { try { if (out != null) { diff --git a/src/main/java/vip/fubuki/playersync/sync/chat/ChatSyncServer.java b/src/main/java/vip/fubuki/playersync/sync/chat/ChatSyncServer.java index 6697d6b..0080a9b 100644 --- a/src/main/java/vip/fubuki/playersync/sync/chat/ChatSyncServer.java +++ b/src/main/java/vip/fubuki/playersync/sync/chat/ChatSyncServer.java @@ -3,7 +3,10 @@ package vip.fubuki.playersync.sync.chat; import vip.fubuki.playersync.PlayerSync; import vip.fubuki.playersync.config.JdbcConfig; -import java.io.*; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketTimeoutException; @@ -26,12 +29,10 @@ public class ChatSyncServer { serverSocket.setReuseAddress(true); PlayerSync.LOGGER.info("Chat server started successfully on port {}", JdbcConfig.CHAT_SERVER_PORT.get()); - startHeartbeatBroadcast(); - while (running && !Thread.currentThread().isInterrupted()) { try { Socket newSocket = serverSocket.accept(); - newSocket.setSoTimeout(30000); + newSocket.setSoTimeout(0); SocketList.add(newSocket); executorService.submit(() -> handleClient(newSocket)); PlayerSync.LOGGER.info("New client connected, total clients: {}", SocketList.size()); @@ -96,47 +97,6 @@ public class ChatSyncServer { } } - private void startHeartbeatBroadcast() { - Thread heartbeatThread = new Thread(() -> { - while (running) { - try { - Thread.sleep(20000); - broadcastHeartbeat(); - } catch (InterruptedException e) { - Thread.currentThread().interrupt(); - break; - } - } - }, "ChatSync-Server-Heartbeat"); - heartbeatThread.setDaemon(true); - heartbeatThread.start(); - } - - private void broadcastHeartbeat() { - Iterator iterator = SocketList.iterator(); - while (iterator.hasNext()) { - Socket socket = iterator.next(); - if (!socket.isClosed()) { - try { - PrintWriter writer = new PrintWriter( - new BufferedWriter( - new OutputStreamWriter(socket.getOutputStream())), true); - writer.println(""); - } catch (IOException e) { - PlayerSync.LOGGER.warn("Failed to send heartbeat to client, removing: {}", e.getMessage()); - iterator.remove(); - try { - socket.close(); - } catch (IOException ex) { - // Ignore - } - } - } else { - iterator.remove(); - } - } - } - public void shutdown() { running = false; try {