From 76da347fb91a721c45c5cfd3f54dceb62fc06d73 Mon Sep 17 00:00:00 2001 From: Persson-dev Date: Tue, 4 Mar 2025 16:07:35 +0100 Subject: [PATCH] client gui + headless server --- ChatApp/app/build.gradle | 17 +++++++++-- ChatApp/app/src/main/java/ChatAppServer.java | 15 ++++++++++ .../app/src/main/java/client/ClientGui.java | 28 +++++++++++++++++++ ChatApp/app/src/main/java/server/Server.java | 3 ++ 4 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 ChatApp/app/src/main/java/ChatAppServer.java create mode 100644 ChatApp/app/src/main/java/client/ClientGui.java diff --git a/ChatApp/app/build.gradle b/ChatApp/app/build.gradle index fd20529..185cd9c 100644 --- a/ChatApp/app/build.gradle +++ b/ChatApp/app/build.gradle @@ -8,6 +8,7 @@ plugins { // Apply the application plugin to add support for building a CLI application in Java. id 'application' + id 'org.openjfx.javafxplugin' version '0.1.0' } repositories { @@ -32,9 +33,13 @@ java { } } +javafx { + modules = ['javafx.graphics', 'javafx.controls', 'javafx.fxml' ] +} + application { // Define the main class for the application. - mainClass = 'ChatApp' + mainClass = 'client.ClientGui' } run { @@ -48,7 +53,7 @@ tasks.named('test') { useJUnitPlatform() } -tasks.register("server", JavaExec){ +tasks.register("admin", JavaExec){ group = "ChatAppConsole" description = "Runs the server + the admin client" mainClass.set("ChatApp") @@ -56,6 +61,14 @@ tasks.register("server", JavaExec){ standardInput = System.in } +tasks.register("server", JavaExec){ + group = "ChatAppConsole" + description = "Runs the headless server" + mainClass.set("ChatAppServer") + classpath = sourceSets.main.runtimeClasspath + standardInput = System.in +} + tasks.register("client", JavaExec) { group = "ChatAppConsole" description = "Runs the client" diff --git a/ChatApp/app/src/main/java/ChatAppServer.java b/ChatApp/app/src/main/java/ChatAppServer.java new file mode 100644 index 0000000..f06de95 --- /dev/null +++ b/ChatApp/app/src/main/java/ChatAppServer.java @@ -0,0 +1,15 @@ +import java.net.SocketException; + +import server.Server; + +public class ChatAppServer { + public static void main(String[] args) { + // run ./gradlew server --args="port" to launch the server with a specific port + try { + Server server = new Server(args.length > 0 ? Integer.parseInt(args[0]) : 0); + System.out.println("Server running on port " + server.getRunningPort() + "!"); + } catch (SocketException e) { + e.printStackTrace(); + } + } +} diff --git a/ChatApp/app/src/main/java/client/ClientGui.java b/ChatApp/app/src/main/java/client/ClientGui.java new file mode 100644 index 0000000..5fe956e --- /dev/null +++ b/ChatApp/app/src/main/java/client/ClientGui.java @@ -0,0 +1,28 @@ +package client; + +import javafx.application.Application; +import javafx.scene.Scene; +import javafx.scene.control.Label; +import javafx.scene.layout.StackPane; +import javafx.stage.Stage; + +public class ClientGui extends Application { + public static void main(String[] args) { + launch(args); + } + + @Override + public void start(Stage primaryStage) throws Exception { + primaryStage.setTitle("JavaFX with Gradle"); + + Label label = new Label("Hello, JavaFX!"); + + StackPane root = new StackPane(label); + + Scene scene = new Scene(root, 640, 480); + + primaryStage.setScene(scene); + + primaryStage.show(); + } +} diff --git a/ChatApp/app/src/main/java/server/Server.java b/ChatApp/app/src/main/java/server/Server.java index 7492d8b..376e5d8 100644 --- a/ChatApp/app/src/main/java/server/Server.java +++ b/ChatApp/app/src/main/java/server/Server.java @@ -149,4 +149,7 @@ public class Server implements PacketHandler { return false; } + public int getRunningPort() { + return this.serverSocket.getLocalPort(); + } }