From 9b206629c0c01a5c31ca8190719aef0e144c294a Mon Sep 17 00:00:00 2001 From: AleandroPagani Date: Wed, 6 May 2026 15:56:40 +0200 Subject: [PATCH] Add: network interface selection GUI --- .../polimi/ingsw/gc14/ClientLauncherGUI.java | 2 +- .../gc14/View/GUI/LoginFXMLController.java | 42 ++++++++++++++++++- .../polimi/ingsw/gc14/View/GUI/LoginView.java | 1 + src/main/resources/GUIScene/login.fxml | 3 ++ 4 files changed, 45 insertions(+), 3 deletions(-) diff --git a/src/main/java/it/polimi/ingsw/gc14/ClientLauncherGUI.java b/src/main/java/it/polimi/ingsw/gc14/ClientLauncherGUI.java index 1bd2987..e37587a 100644 --- a/src/main/java/it/polimi/ingsw/gc14/ClientLauncherGUI.java +++ b/src/main/java/it/polimi/ingsw/gc14/ClientLauncherGUI.java @@ -32,7 +32,7 @@ public class ClientLauncherGUI extends Application { // Connessione in un thread separato — non bloccare il JavaFX thread! new Thread(() -> { if (networkType == 0) { - RMIClient client = new RMIClient(controller, ip, 1099, "localhost"); + RMIClient client = new RMIClient(controller, ip, 1099, loginView.getInterfaccia()); if (client.connect(nome, numPlayer)) { controller.setClient(client); // Da qui in poi il server chiamerà onGameInit → render() diff --git a/src/main/java/it/polimi/ingsw/gc14/View/GUI/LoginFXMLController.java b/src/main/java/it/polimi/ingsw/gc14/View/GUI/LoginFXMLController.java index 8e6cba6..64cc6de 100644 --- a/src/main/java/it/polimi/ingsw/gc14/View/GUI/LoginFXMLController.java +++ b/src/main/java/it/polimi/ingsw/gc14/View/GUI/LoginFXMLController.java @@ -1,8 +1,16 @@ package it.polimi.ingsw.gc14.View.GUI; +import javafx.application.Platform; import javafx.fxml.FXML; import javafx.scene.control.*; +import java.net.Inet4Address; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.List; + public class LoginFXMLController { @FXML private TextField campoNome; @@ -12,14 +20,38 @@ public class LoginFXMLController { @FXML private RadioButton btnTCP; @FXML private Button btnAccedi; @FXML private Label labelErrore; + @FXML private ComboBox comboInterfaccia; @FXML public void initialize() { - // I RadioButton vanno collegati a un ToggleGroup a mano - // perché FXML non lo fa automaticamente ToggleGroup group = new ToggleGroup(); btnRMI.setToggleGroup(group); btnTCP.setToggleGroup(group); + + // Carica le interfacce in background + new Thread(() -> { + try { + List ips = new ArrayList<>(); + Enumeration interfaces = NetworkInterface.getNetworkInterfaces(); + while (interfaces.hasMoreElements()) { + NetworkInterface ni = interfaces.nextElement(); + if (!ni.isUp() || ni.isLoopback() || ni.isVirtual()) continue; + Enumeration addresses = ni.getInetAddresses(); + while (addresses.hasMoreElements()) { + InetAddress addr = addresses.nextElement(); + if (addr instanceof Inet4Address) { + ips.add(ni.getDisplayName() + " -> " + addr.getHostAddress()); + } + } + } + Platform.runLater(() -> { + comboInterfaccia.getItems().addAll(ips); + if (!ips.isEmpty()) comboInterfaccia.getSelectionModel().selectFirst(); + }); + } catch (Exception e) { + Platform.runLater(() -> setErrore("Errore nel rilevare le interfacce.")); + } + }).start(); } // --- Getter esposti a LoginView --- @@ -40,5 +72,11 @@ public class LoginFXMLController { public String getIP() { return campoIP.getText().trim(); } + public String getInterfaccia() { + String selected = comboInterfaccia.getValue(); + if (selected == null) return ""; + return selected.contains("->") ? selected.split("->")[1].trim() : selected; + } + public void setErrore(String messaggio) { labelErrore.setText(messaggio); } } \ No newline at end of file diff --git a/src/main/java/it/polimi/ingsw/gc14/View/GUI/LoginView.java b/src/main/java/it/polimi/ingsw/gc14/View/GUI/LoginView.java index 51eaf1b..75e8e9b 100644 --- a/src/main/java/it/polimi/ingsw/gc14/View/GUI/LoginView.java +++ b/src/main/java/it/polimi/ingsw/gc14/View/GUI/LoginView.java @@ -31,5 +31,6 @@ public class LoginView { public int getNumPlayers() { return fxmlController.getNumPlayers(); } public int getNetworkType() { return fxmlController.getNetworkType(); } public String getIP() { return fxmlController.getIP(); } + public String getInterfaccia() {return fxmlController.getInterfaccia();} public void setErrore(String messaggio) { fxmlController.setErrore(messaggio); } } \ No newline at end of file diff --git a/src/main/resources/GUIScene/login.fxml b/src/main/resources/GUIScene/login.fxml index 9e55c8f..c9219e4 100644 --- a/src/main/resources/GUIScene/login.fxml +++ b/src/main/resources/GUIScene/login.fxml @@ -22,6 +22,9 @@