From a5930180d03e2f4e44b6657a398b29391e5fc8ec Mon Sep 17 00:00:00 2001 From: zhangmeng <1334717033@qq.com> Date: Thu, 16 Mar 2023 16:34:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=8F=9C=E5=8D=95=202023?= =?UTF-8?q?=E5=B9=B43=E6=9C=8816=E6=97=A516:33:48?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CodecToolsController.java | 4 + .../tools/controller/HomeController.java | 4 + .../tools/controller/HttpToolsController.java | 4 + .../controller/NetWorkToolsController.java | 4 + .../tools/controller/PlayerController.java | 4 + .../controller/ServerToolsController.java | 33 ++++ .../controller/SmallToolsController.java | 4 + .../controller/SocketServerController.java | 166 ++++++++++++++++++ .../tools/controller/SqlToolsController.java | 4 + .../zhangmeng/tools/utils/ResourcesUtils.java | 1 + src/main/resources/fxml/codec-tools.fxml | 1 + src/main/resources/fxml/home.fxml | 1 + src/main/resources/fxml/http-tools.fxml | 1 + src/main/resources/fxml/network-tools.fxml | 1 + src/main/resources/fxml/player.fxml | 1 + src/main/resources/fxml/server-tools.fxml | 1 + src/main/resources/fxml/small-tools.fxml | 1 + src/main/resources/fxml/socket-server.fxml | 21 +++ src/main/resources/fxml/sql-tools.fxml | 1 + 19 files changed, 257 insertions(+) create mode 100644 src/main/java/com/zhangmeng/tools/controller/SocketServerController.java create mode 100644 src/main/resources/fxml/socket-server.fxml diff --git a/src/main/java/com/zhangmeng/tools/controller/CodecToolsController.java b/src/main/java/com/zhangmeng/tools/controller/CodecToolsController.java index 76f43b9..31a71be 100644 --- a/src/main/java/com/zhangmeng/tools/controller/CodecToolsController.java +++ b/src/main/java/com/zhangmeng/tools/controller/CodecToolsController.java @@ -542,4 +542,8 @@ public class CodecToolsController { public void mail_menu_item(ActionEvent event) { load_small_tools(7); } + + public void socket_server_menu_item(ActionEvent event) { + load_server_tools(3); + } } diff --git a/src/main/java/com/zhangmeng/tools/controller/HomeController.java b/src/main/java/com/zhangmeng/tools/controller/HomeController.java index f3c2c25..4dc0bcf 100644 --- a/src/main/java/com/zhangmeng/tools/controller/HomeController.java +++ b/src/main/java/com/zhangmeng/tools/controller/HomeController.java @@ -467,4 +467,8 @@ public class HomeController implements Serializable { public void ssh_client_menu_item(ActionEvent event) { load_server_tools(2); } + + public void socket_server_menu_item(ActionEvent event) { + load_server_tools(3); + } } \ No newline at end of file diff --git a/src/main/java/com/zhangmeng/tools/controller/HttpToolsController.java b/src/main/java/com/zhangmeng/tools/controller/HttpToolsController.java index 8d084e9..2b749aa 100644 --- a/src/main/java/com/zhangmeng/tools/controller/HttpToolsController.java +++ b/src/main/java/com/zhangmeng/tools/controller/HttpToolsController.java @@ -478,4 +478,8 @@ public class HttpToolsController { public void mail_menu_item(ActionEvent event) { load_small_tools(7); } + + public void socket_server_menu_item(ActionEvent event) { + load_server_tools(3); + } } diff --git a/src/main/java/com/zhangmeng/tools/controller/NetWorkToolsController.java b/src/main/java/com/zhangmeng/tools/controller/NetWorkToolsController.java index 887628b..5f7032b 100644 --- a/src/main/java/com/zhangmeng/tools/controller/NetWorkToolsController.java +++ b/src/main/java/com/zhangmeng/tools/controller/NetWorkToolsController.java @@ -414,4 +414,8 @@ public class NetWorkToolsController { ListView listView = (ListView) fx.lookup("#listView"); listView.getSelectionModel().select(index); } + + public void socket_server_menu_item(ActionEvent event) { + load_server_tools(3); + } } diff --git a/src/main/java/com/zhangmeng/tools/controller/PlayerController.java b/src/main/java/com/zhangmeng/tools/controller/PlayerController.java index 0d6f241..2dcb25c 100644 --- a/src/main/java/com/zhangmeng/tools/controller/PlayerController.java +++ b/src/main/java/com/zhangmeng/tools/controller/PlayerController.java @@ -500,4 +500,8 @@ public class PlayerController { public void mail_menu_item(ActionEvent event) { load_small_tools(7); } + + public void socket_server_menu_item(ActionEvent event) { + load_server_tools(3); + } } diff --git a/src/main/java/com/zhangmeng/tools/controller/ServerToolsController.java b/src/main/java/com/zhangmeng/tools/controller/ServerToolsController.java index f2b31ff..24532b3 100644 --- a/src/main/java/com/zhangmeng/tools/controller/ServerToolsController.java +++ b/src/main/java/com/zhangmeng/tools/controller/ServerToolsController.java @@ -42,6 +42,7 @@ public class ServerToolsController { private AnchorPane httpServer; private AnchorPane ftpServer; private AnchorPane sshClient; + private AnchorPane socketServer; public static final String color_cell = "#f4f4f4"; @@ -268,10 +269,32 @@ public class ServerToolsController { } sshClient(flag); } + + if (newValue.getIndex() == 3){ + if (socketServer != null){ + flag = true; + } + socketServer(flag); + } } }); } + private void socketServer(boolean flag){ + listView.getSelectionModel().select(3); + if (!flag){ + try { + root = FXMLLoader.load(ResourcesUtils.getResource("socket-server")); + } catch (IOException e) { + e.printStackTrace(); + } + ftpServer = root; + }else { + root = ftpServer; + } + common_method(); + } + private void sshClient(boolean flag) { listView.getSelectionModel().select(2); if (!flag){ @@ -328,6 +351,7 @@ public class ServerToolsController { case Http_Server -> new Image(ImagePath.path(ImagePath.ImagePathType.MD5)); case Ftp_Server -> new Image(ImagePath.path(ImagePath.ImagePathType.SPRING_SECURITY)); case SSH_Client -> new Image(ImagePath.path(ImagePath.ImagePathType.SPRING_SECURITY)); + case Socket_Server -> new Image(ImagePath.path(ImagePath.ImagePathType.SPRING_SECURITY)); }; } @@ -474,4 +498,13 @@ public class ServerToolsController { } sshClient(flag); } + + @FXML + public void socket_server_menu_item(ActionEvent event) { + boolean flag = false; + if (sshClient != null){ + flag = true; + } + socketServer(flag); + } } diff --git a/src/main/java/com/zhangmeng/tools/controller/SmallToolsController.java b/src/main/java/com/zhangmeng/tools/controller/SmallToolsController.java index bb29a06..db1d343 100644 --- a/src/main/java/com/zhangmeng/tools/controller/SmallToolsController.java +++ b/src/main/java/com/zhangmeng/tools/controller/SmallToolsController.java @@ -660,4 +660,8 @@ public class SmallToolsController { ListView listView = (ListView) fx.lookup("#listView"); listView.getSelectionModel().select(index); } + + public void socket_server_menu_item(ActionEvent event) { + load_server_tools(3); + } } diff --git a/src/main/java/com/zhangmeng/tools/controller/SocketServerController.java b/src/main/java/com/zhangmeng/tools/controller/SocketServerController.java new file mode 100644 index 0000000..632ce9b --- /dev/null +++ b/src/main/java/com/zhangmeng/tools/controller/SocketServerController.java @@ -0,0 +1,166 @@ +package com.zhangmeng.tools.controller; + +import javafx.application.Platform; +import javafx.collections.FXCollections; +import javafx.collections.ListChangeListener; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.control.TextArea; +import javafx.scene.control.TextField; +import lombok.extern.slf4j.Slf4j; +import org.java_websocket.WebSocket; +import org.java_websocket.handshake.ClientHandshake; +import org.java_websocket.server.WebSocketServer; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.util.HashMap; +import java.util.Map; + +/** + * @author : 芊芊墨客 + * @version : 1.0 + * @date : 2023-03-16 11:22 + */ +@Slf4j +public class SocketServerController { + + @FXML + public TextField server_status; + + @FXML + public Button stop; + + @FXML + public Button start; + + @FXML + public TextField port; + + public static ObservableList message_list = FXCollections.observableArrayList(); + + @FXML + public TextArea message_show; + + private WebSocketServer webSocketServer; + + private boolean isStart; + + public static Map map = new HashMap<>(); + + @FXML + public void initialize() { + if (server_status.getText().length() == 0 ){ + server_status.setText("服务未启动!"); + } + + port.setText(String.valueOf(9999)); + start.setOnAction(event -> { + if (isStart){ + try { + webSocketServer.stop(); + } catch (IOException | InterruptedException e) { + e.printStackTrace(); + } + } + sshServer_init(); + }); + + stop.setOnAction(event -> { + if (isStart){ + try { + webSocketServer.stop(); + isStart = false; + server_status.setText("服务已经停止!端口:" + port.getText()); + } catch (IOException | InterruptedException e) { + e.printStackTrace(); + } + } + }); + message_list.addListener((ListChangeListener) c -> { + while (c.next()) { + if (c.wasAdded()) { + StringBuilder stringBuilder = new StringBuilder(); + for (String s : message_list) { + stringBuilder.append(s); + } + receive(stringBuilder.toString()); + } + } + }); + } + + public void sshServer_init(){ + //启动socket server + webSocketServer = new WebSocketServer(new InetSocketAddress(Integer.parseInt(port.getText()))) { + + @Override + public void onOpen(WebSocket webSocket, ClientHandshake clientHandshake) { + add_message("WebSocketServer:open----------------------------------------------"); + put(webSocket); + } + + @Override + public void onClose(WebSocket webSocket, int i, String s, boolean b) { + add_message("WebSocketServer:onClose--------------------------------------------"); + remove(webSocket); + } + + @Override + public void onMessage(WebSocket webSocket, String s) { + add_message("WebSocketServer:onMessage--------------------------------------------"); + add_message(s); + webSocket.send(s); + } + + @Override + public void onError(WebSocket webSocket, Exception e) { + add_message("WebSocketServer:onError--------------------------------------------"); + } + + @Override + public void onStart() { + add_message("WebSocketServer:onStart--------------------------------------------"); + } + }; + webSocketServer.start(); + isStart = true; + server_status.setText("服务已启动!端口:" + port.getText()); + } + + public void put(WebSocket webSocket){ + String resourceDescriptor = webSocket.getResourceDescriptor(); + String[] split = resourceDescriptor.split("\\?"); + if (split.length > 0){ + String params = split[1]; + String userId = params.split("&")[0].split("=")[1]; + map.put(userId,webSocket); + } + } + + public WebSocket get(String userId){ + return map.get(userId); + } + + public void remove(WebSocket webSocket){ + String resourceDescriptor = webSocket.getResourceDescriptor(); + String[] split = resourceDescriptor.split("\\?"); + if (split.length > 0){ + String params = split[1]; + String userId = params.split("&")[0].split("=")[1]; + map.remove(userId); + } + } + + public void receive(String msg) { + Platform.runLater(() -> { + this.message_show.setText(msg); + }); + } + + public static void add_message(String msg){ + message_list.add(msg); + message_list.add(System.lineSeparator()); + } +} diff --git a/src/main/java/com/zhangmeng/tools/controller/SqlToolsController.java b/src/main/java/com/zhangmeng/tools/controller/SqlToolsController.java index 9e1982b..4b62d87 100644 --- a/src/main/java/com/zhangmeng/tools/controller/SqlToolsController.java +++ b/src/main/java/com/zhangmeng/tools/controller/SqlToolsController.java @@ -423,4 +423,8 @@ public class SqlToolsController { ListView listView = (ListView) fx.lookup("#listView"); listView.getSelectionModel().select(index); } + + public void socket_server_menu_item(ActionEvent event) { + load_server_tools(3); + } } diff --git a/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java b/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java index 58591d8..bf70572 100644 --- a/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java +++ b/src/main/java/com/zhangmeng/tools/utils/ResourcesUtils.java @@ -275,6 +275,7 @@ public class ResourcesUtils { Http_Server("Http Server工具",0), Ftp_Server("Ftp Server工具",1), SSH_Client("ssh 连接工具",2), + Socket_Server("socket Server",3); ; ServerTools(String title, int index) { diff --git a/src/main/resources/fxml/codec-tools.fxml b/src/main/resources/fxml/codec-tools.fxml index 1d0d8df..5672c69 100644 --- a/src/main/resources/fxml/codec-tools.fxml +++ b/src/main/resources/fxml/codec-tools.fxml @@ -67,6 +67,7 @@ + diff --git a/src/main/resources/fxml/home.fxml b/src/main/resources/fxml/home.fxml index e8d1c93..492cd69 100644 --- a/src/main/resources/fxml/home.fxml +++ b/src/main/resources/fxml/home.fxml @@ -69,6 +69,7 @@ + diff --git a/src/main/resources/fxml/http-tools.fxml b/src/main/resources/fxml/http-tools.fxml index 126b7df..4ded3a9 100644 --- a/src/main/resources/fxml/http-tools.fxml +++ b/src/main/resources/fxml/http-tools.fxml @@ -69,6 +69,7 @@ + diff --git a/src/main/resources/fxml/network-tools.fxml b/src/main/resources/fxml/network-tools.fxml index da3d3d5..abb3381 100644 --- a/src/main/resources/fxml/network-tools.fxml +++ b/src/main/resources/fxml/network-tools.fxml @@ -69,6 +69,7 @@ + diff --git a/src/main/resources/fxml/player.fxml b/src/main/resources/fxml/player.fxml index b748e97..8eeb67d 100644 --- a/src/main/resources/fxml/player.fxml +++ b/src/main/resources/fxml/player.fxml @@ -67,6 +67,7 @@ + diff --git a/src/main/resources/fxml/server-tools.fxml b/src/main/resources/fxml/server-tools.fxml index ee32e08..bc6ebfa 100644 --- a/src/main/resources/fxml/server-tools.fxml +++ b/src/main/resources/fxml/server-tools.fxml @@ -69,6 +69,7 @@ + diff --git a/src/main/resources/fxml/small-tools.fxml b/src/main/resources/fxml/small-tools.fxml index c4fd24f..e207147 100644 --- a/src/main/resources/fxml/small-tools.fxml +++ b/src/main/resources/fxml/small-tools.fxml @@ -67,6 +67,7 @@ + diff --git a/src/main/resources/fxml/socket-server.fxml b/src/main/resources/fxml/socket-server.fxml new file mode 100644 index 0000000..c629e02 --- /dev/null +++ b/src/main/resources/fxml/socket-server.fxml @@ -0,0 +1,21 @@ + + + + + + + + + + + +