Feat/gameui #244
+10
-10
@@ -5,17 +5,17 @@ import javafx.scene.control.Label;
|
|||||||
import javafx.scene.layout.VBox;
|
import javafx.scene.layout.VBox;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Controller für die Casino-Spielfläche.
|
* Controller for the casino gaming area.
|
||||||
*
|
*
|
||||||
* <p>Verantwortlich für: - die Darstellung des Pokertisches und der Spieleroberfläche, - die
|
* <p>Responsible for: - the display of the poker table and the player interface, - the
|
||||||
* Verarbeitung von Benutzereingaben, - die Schnittstelle zur GameEngine und zum Netzwerkprotokoll.
|
* processing of user input, - the interface to the game engine and the network protocol.
|
||||||
*
|
*
|
||||||
* <p>Hinweise: - Die Methode `onTableClick()` dient aktuell nur als Test-Logik. Sie ist ggf. nicht
|
* <p>Notes: - The `onTableClick()` method currently serves only as test logic.
|
||||||
* mehr funktionsfähig und wird zukünftig durch die finale Spielinteraktion ersetzt.
|
* It may no longer be functional and will be replaced by the final game interaction in the future.
|
||||||
*/
|
*/
|
||||||
public class CasinoGameController {
|
public class CasinoGameController {
|
||||||
|
|
||||||
/** Standardkonstruktor. Wird von FXML verwendet. */
|
/** Standard constructor. Used by FXML. */
|
||||||
public CasinoGameController() {
|
public CasinoGameController() {
|
||||||
// default constructor for FXML
|
// default constructor for FXML
|
||||||
}
|
}
|
||||||
@@ -23,13 +23,13 @@ public class CasinoGameController {
|
|||||||
@FXML private Label welcomeText;
|
@FXML private Label welcomeText;
|
||||||
@FXML private VBox casinoTable;
|
@FXML private VBox casinoTable;
|
||||||
|
|
||||||
// TODO: Test-Logik: wird durch echte Spielinteraktionen ersetzt,
|
// TODO: Test logic: will be replaced by real game interactions,
|
||||||
// sobald die GameEngine fertig ist
|
// once the game engine is finished
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Temporäre Test-Methode, die bei Klick auf den Tisch eine Platzhalteraktion ausführt.
|
* Temporary test method that performs a placeholder action when the table is clicked.
|
||||||
*
|
*
|
||||||
* <p>Wird in der finalen Implementierung durch die Spiel-Logik ersetzt.
|
* <p>In the final implementation, this will be replaced by the game logic.
|
||||||
*/
|
*/
|
||||||
@FXML
|
@FXML
|
||||||
public void onTableClick() {
|
public void onTableClick() {
|
||||||
|
|||||||
@@ -7,17 +7,17 @@ import javafx.scene.Scene;
|
|||||||
import javafx.stage.Stage;
|
import javafx.stage.Stage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hauptklasse für das Casino-Spiel-UI.
|
* Main class for the Casono Game UI.
|
||||||
*
|
*
|
||||||
* <p>Startet die JavaFX-Anwendung, lädt die grafische Oberfläche aus der FXML-Datei und
|
* <p>Starts the JavaFX application, loads the graphical user interface from the FXML file, and
|
||||||
* initialisiert die Haupt-Stage für das Spiel.
|
* initializes the main stage for the game.
|
||||||
*
|
*
|
||||||
* <p>Aufgaben: - Lädt die FXML-Oberfläche "/ui-structure/Casinogameui.fxml". - Lädt das
|
* <p>Tasks: - Loads the FXML interface "/ui-structure/Casinogameui.fxml". - Loads the
|
||||||
* Anwendungs-Icon aus "/images/logoinverted.png". - Startet die Anwendung im Vollbildmodus.
|
* application icon from "/images/logoinverted.png". - Starts the application in full-screen mode.
|
||||||
*/
|
*/
|
||||||
public class CasinoGameUI extends Application {
|
public class CasinoGameUI extends Application {
|
||||||
|
|
||||||
/** Standardkonstruktor. */
|
/** default constructor */
|
||||||
public CasinoGameUI() {
|
public CasinoGameUI() {
|
||||||
// default no-arg constructor
|
// default no-arg constructor
|
||||||
}
|
}
|
||||||
@@ -26,10 +26,10 @@ public class CasinoGameUI extends Application {
|
|||||||
private static final int DEFAULT_HEIGHT = 800;
|
private static final int DEFAULT_HEIGHT = 800;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Startet die Haupt-Stage der Anwendung.
|
* Starts the main stage of the application.
|
||||||
*
|
*
|
||||||
* @param stage Die vom System bereitgestellte Haupt-Stage.
|
* @param stage The main stage provided by the system.
|
||||||
* @throws IOException Wenn die FXML-Datei oder Ressourcen nicht geladen werden können.
|
* @throws IOException If the FXML file or resources cannot be loaded.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void start(Stage stage) throws IOException {
|
public void start(Stage stage) throws IOException {
|
||||||
@@ -46,9 +46,9 @@ public class CasinoGameUI extends Application {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Startpunkt der Anwendung.
|
* Starting point of the application.
|
||||||
*
|
*
|
||||||
* @param args Befehlszeilenargumente.
|
* @param args Command line arguments.
|
||||||
*/
|
*/
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
launch();
|
launch();
|
||||||
|
|||||||
+78
-80
@@ -31,28 +31,28 @@ import org.apache.logging.log4j.LogManager;
|
|||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Experimenteller integrierter Browser für Casono.
|
* Experimental embedded browser for Casono.
|
||||||
*
|
*
|
||||||
* <p>Diese Klasse implementiert einen einfachen eingebetteten Webbrowser auf Basis von {@link
|
* <p>This class implements a simple embedded web browser based on {@link
|
||||||
* javafx.scene.web.WebView}. Der Browser dient primär als Hilfswerkzeug innerhalb des Spiels, um
|
* javafx.scene.web.WebView}. The browser primarily serves as a utility within the game to
|
||||||
* externe Inhalte wie Webseiten oder Videos anzuzeigen.
|
* display external content such as web pages or videos.
|
||||||
*
|
*
|
||||||
* <p>Status Der Browser befindet sich derzeit in einer experimentellen Phase. Einige
|
* <p>Status The browser is currently in an experimental phase. Some
|
||||||
* Sicherheitsmechanismen basieren auf experimentellen KI-gestützten Empfehlungen und können sich in
|
* security mechanisms are based on experimental AI-driven recommendations and may
|
||||||
* zukünftigen Versionen noch ändern.
|
* change in future versions.
|
||||||
*
|
*
|
||||||
* <p>Zweck Der Browser wird aktuell experimentell genutzt, um: Pokerregeln direkt im Spiel zu
|
* <p>Purpose The browser is currently being used experimentally to: Explain poker rules directly within the game
|
||||||
* erklären Hilfeseiten oder Dokumentationen anzuzeigen Videos (z.B. Tutorials oder Erklärungen)
|
* Display help pages or documentation Play videos (e.g., tutorials or explanations)
|
||||||
* über Plattformen wie YouTube abzuspielen
|
* via platforms such as YouTube
|
||||||
*
|
*
|
||||||
* <p>Sicherheitsmechanismen Da externe Webseiten geladen werden können, wurden einige grundlegende
|
* <p>Security Mechanisms Since external websites can be loaded, some basic
|
||||||
* Schutzmaßnahmen integriert: - HTTPS-Zwang für Webseiten - Whitelist für bekannte Domains -
|
* protective measures have been integrated: - Mandatory HTTPS for websites - Whitelist for known domains -
|
||||||
* Warnung bei unbekannten Webseiten - JavaScript standardmäßig deaktiviert (man kann es jedoch für
|
* Warning for unknown websites - JavaScript disabled by default (but can be enabled for
|
||||||
* Google etc. einschalten) - Popup-Blocker - Automatische Cookie-Löschung beim Schließen
|
* Google, etc.) - Pop-up blocker - Automatic cookie deletion upon closing
|
||||||
*/
|
*/
|
||||||
public class CasinoBrowserController {
|
public class CasinoBrowserController {
|
||||||
|
|
||||||
/** Standardkonstruktor. Initialisiert den CasinoBrowserController. */
|
/** Default constructor. Initializes the CasinoBrowserController. */
|
||||||
public CasinoBrowserController() {
|
public CasinoBrowserController() {
|
||||||
// Intentionally left blank; controller initialization is FXML-driven.
|
// Intentionally left blank; controller initialization is FXML-driven.
|
||||||
}
|
}
|
||||||
@@ -101,7 +101,7 @@ public class CasinoBrowserController {
|
|||||||
|
|
||||||
private static boolean javascriptEnabled = false;
|
private static boolean javascriptEnabled = false;
|
||||||
|
|
||||||
/** Löscht alle gespeicherten Cookies der aktuellen Browser-Sitzung. */
|
/** Deletes all cookies stored during the current browser session. */
|
||||||
private static void clearCookies() {
|
private static void clearCookies() {
|
||||||
try {
|
try {
|
||||||
COOKIE_MANAGER.getCookieStore().removeAll();
|
COOKIE_MANAGER.getCookieStore().removeAll();
|
||||||
@@ -110,12 +110,12 @@ public class CasinoBrowserController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Öffnet ein neues Browserfenster und lädt eine angegebene Webseite.
|
* Opens a new browser window and loads a specified webpage.
|
||||||
*
|
*
|
||||||
* <p>Falls die Webseite nicht zur Liste vertrauenswürdiger Domains gehört, wird der Benutzer
|
* <p>If the webpage is not on the list of trusted domains, the user
|
||||||
* gefragt, ob die Seite dennoch geladen werden soll.
|
* will be asked whether the page should be loaded anyway.
|
||||||
*
|
*
|
||||||
* @param url die Startadresse der Webseite, die geladen werden soll
|
* @param url the URL of the webpage to be loaded
|
||||||
*/
|
*/
|
||||||
public static void open(String url) {
|
public static void open(String url) {
|
||||||
Platform.runLater(
|
Platform.runLater(
|
||||||
@@ -182,10 +182,10 @@ public class CasinoBrowserController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* WebView Container
|
* WebView container
|
||||||
*
|
*
|
||||||
* @param webView WebView Inhalt
|
* @param webView WebView content
|
||||||
* @return StackPane Container
|
* @return StackPane container
|
||||||
*/
|
*/
|
||||||
public static StackPane createWebContainer(WebView webView) {
|
public static StackPane createWebContainer(WebView webView) {
|
||||||
StackPane webContainer = new StackPane(webView);
|
StackPane webContainer = new StackPane(webView);
|
||||||
@@ -198,7 +198,7 @@ public class CasinoBrowserController {
|
|||||||
/**
|
/**
|
||||||
* Popup Blocker
|
* Popup Blocker
|
||||||
*
|
*
|
||||||
* @param engine WebEngine nutzen
|
* @param engine Use WebEngine
|
||||||
*/
|
*/
|
||||||
public static void configurePopupBlocker(WebEngine engine) {
|
public static void configurePopupBlocker(WebEngine engine) {
|
||||||
engine.setCreatePopupHandler(
|
engine.setCreatePopupHandler(
|
||||||
@@ -212,8 +212,7 @@ public class CasinoBrowserController {
|
|||||||
var stream = CasinoBrowserController.class.getResourceAsStream(LOGO_PATH);
|
var stream = CasinoBrowserController.class.getResourceAsStream(LOGO_PATH);
|
||||||
Image logo = new Image(stream);
|
Image logo = new Image(stream);
|
||||||
|
|
||||||
// Variable 'streamM' abgekürzt, um das 100-Zeichen-Limit (LineLength)
|
// Variable ‘streamM’ abbreviated to comply with the 100-character limit (LineLength)
|
||||||
// einzuhalten
|
|
||||||
var streamM =
|
var streamM =
|
||||||
CasinoBrowserController.class.getResourceAsStream(LOGO_PATH_MAIN);
|
CasinoBrowserController.class.getResourceAsStream(LOGO_PATH_MAIN);
|
||||||
Image logomain = new Image(streamM);
|
Image logomain = new Image(streamM);
|
||||||
@@ -232,7 +231,7 @@ public class CasinoBrowserController {
|
|||||||
alert.setGraphic(logoView);
|
alert.setGraphic(logoView);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LOGGER.error("Logo konnte nicht geladen werden");
|
LOGGER.error("The logo could not be loaded");
|
||||||
}
|
}
|
||||||
|
|
||||||
alert.showAndWait();
|
alert.showAndWait();
|
||||||
@@ -241,9 +240,9 @@ public class CasinoBrowserController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Logos laden
|
* Load logos
|
||||||
*
|
*
|
||||||
* @param stage Fenster Stage
|
* @param stage Window Stage
|
||||||
* @return ImageView Logo
|
* @return ImageView Logo
|
||||||
*/
|
*/
|
||||||
private static ImageView loadLogos(Stage stage) {
|
private static ImageView loadLogos(Stage stage) {
|
||||||
@@ -253,8 +252,7 @@ public class CasinoBrowserController {
|
|||||||
var stream = CasinoBrowserController.class.getResourceAsStream(LOGO_PATH);
|
var stream = CasinoBrowserController.class.getResourceAsStream(LOGO_PATH);
|
||||||
Image logo = new Image(stream);
|
Image logo = new Image(stream);
|
||||||
|
|
||||||
// Variable 'streamM' abgekürzt, um das 100-Zeichen-Limit (LineLength)
|
// Variable ‘streamM’ abbreviated to comply with the 100-character limit (LineLength)
|
||||||
// einzuhalten
|
|
||||||
var streamM = CasinoBrowserController.class.getResourceAsStream(LOGO_PATH_MAIN);
|
var streamM = CasinoBrowserController.class.getResourceAsStream(LOGO_PATH_MAIN);
|
||||||
Image logomain = new Image(streamM);
|
Image logomain = new Image(streamM);
|
||||||
|
|
||||||
@@ -268,17 +266,17 @@ public class CasinoBrowserController {
|
|||||||
browserLogo.setPreserveRatio(true);
|
browserLogo.setPreserveRatio(true);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
LOGGER.error("Logo konnte nicht geladen werden");
|
LOGGER.error("The logo could not be loaded");
|
||||||
}
|
}
|
||||||
|
|
||||||
return browserLogo;
|
return browserLogo;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* URL Feld
|
* URL field
|
||||||
*
|
*
|
||||||
* @param url Start URL
|
* @param url Start URL
|
||||||
* @return TextField Eingabe
|
* @return TextField input
|
||||||
*/
|
*/
|
||||||
public static TextField createUrlField(String url) {
|
public static TextField createUrlField(String url) {
|
||||||
TextField urlField = new TextField(url);
|
TextField urlField = new TextField(url);
|
||||||
@@ -289,12 +287,12 @@ public class CasinoBrowserController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sicherheits Label
|
* Security Label
|
||||||
*
|
*
|
||||||
* @return Label Anzeige
|
* @return Label display
|
||||||
*/
|
*/
|
||||||
public static Label createSecurityLabel() {
|
public static Label createSecurityLabel() {
|
||||||
Label securityLabel = new Label("SICHER");
|
Label securityLabel = new Label("SAFE");
|
||||||
securityLabel.getStyleClass().add("security-label");
|
securityLabel.getStyleClass().add("security-label");
|
||||||
|
|
||||||
return securityLabel;
|
return securityLabel;
|
||||||
@@ -303,8 +301,8 @@ public class CasinoBrowserController {
|
|||||||
/**
|
/**
|
||||||
* JS Toggle
|
* JS Toggle
|
||||||
*
|
*
|
||||||
* @param engine WebEngine nutzen
|
* @param engine Use WebEngine
|
||||||
* @return Button Umschalten
|
* @return Toggle button
|
||||||
*/
|
*/
|
||||||
public static Button createJsToggle(WebEngine engine) {
|
public static Button createJsToggle(WebEngine engine) {
|
||||||
Button jsToggle = new Button("JS EINSCHALTEN");
|
Button jsToggle = new Button("JS EINSCHALTEN");
|
||||||
@@ -316,7 +314,7 @@ public class CasinoBrowserController {
|
|||||||
engine.setJavaScriptEnabled(javascriptEnabled);
|
engine.setJavaScriptEnabled(javascriptEnabled);
|
||||||
|
|
||||||
if (javascriptEnabled) {
|
if (javascriptEnabled) {
|
||||||
jsToggle.setText("JS AUSSCHALTEN");
|
jsToggle.setText("JS TURN OFF");
|
||||||
jsToggle.getStyleClass().removeAll("red-button");
|
jsToggle.getStyleClass().removeAll("red-button");
|
||||||
jsToggle.getStyleClass().add("yellow-button");
|
jsToggle.getStyleClass().add("yellow-button");
|
||||||
|
|
||||||
@@ -331,10 +329,10 @@ public class CasinoBrowserController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Zurück Button
|
* Back Button
|
||||||
*
|
*
|
||||||
* @param engine WebEngine nutzen
|
* @param engine Use WebEngine
|
||||||
* @return Button Zurück
|
* @return Back button
|
||||||
*/
|
*/
|
||||||
public static Button createBackButton(WebEngine engine) {
|
public static Button createBackButton(WebEngine engine) {
|
||||||
Button backBtn = new Button("<");
|
Button backBtn = new Button("<");
|
||||||
@@ -350,10 +348,10 @@ public class CasinoBrowserController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Vorwärts Button
|
* Forward Button
|
||||||
*
|
*
|
||||||
* @param engine WebEngine nutzen
|
* @param engine Use WebEngine
|
||||||
* @return Button Vorwärts
|
* @return Forward button
|
||||||
*/
|
*/
|
||||||
public static Button createForwardButton(WebEngine engine) {
|
public static Button createForwardButton(WebEngine engine) {
|
||||||
Button fwdBtn = new Button(">");
|
Button fwdBtn = new Button(">");
|
||||||
@@ -373,8 +371,8 @@ public class CasinoBrowserController {
|
|||||||
/**
|
/**
|
||||||
* Reload Button
|
* Reload Button
|
||||||
*
|
*
|
||||||
* @param engine WebEngine nutzen
|
* @param engine Use WebEngine
|
||||||
* @return Button Reload
|
* @return Reload button
|
||||||
*/
|
*/
|
||||||
public static Button createReloadButton(WebEngine engine) {
|
public static Button createReloadButton(WebEngine engine) {
|
||||||
Button reloadBtn = new Button("⟳");
|
Button reloadBtn = new Button("⟳");
|
||||||
@@ -386,9 +384,9 @@ public class CasinoBrowserController {
|
|||||||
/**
|
/**
|
||||||
* Close Button
|
* Close Button
|
||||||
*
|
*
|
||||||
* @param stage Fenster Stage
|
* @param stage Window stage
|
||||||
* @param webView WebView Inhalt
|
* @param webView WebView content
|
||||||
* @return Button Schließen
|
* @return Close button
|
||||||
*/
|
*/
|
||||||
public static Button createCloseButton(Stage stage, WebView webView) {
|
public static Button createCloseButton(Stage stage, WebView webView) {
|
||||||
Button closeBtn = new Button("X");
|
Button closeBtn = new Button("X");
|
||||||
@@ -406,9 +404,9 @@ public class CasinoBrowserController {
|
|||||||
/**
|
/**
|
||||||
* URL Events
|
* URL Events
|
||||||
*
|
*
|
||||||
* @param engine WebEngine nutzen
|
* @param engine Use WebEngine
|
||||||
* @param urlField URL Textfeld
|
* @param urlField URL text field
|
||||||
* @param securityLabel Sicherheits Label
|
* @param securityLabel Security label
|
||||||
*/
|
*/
|
||||||
public static void configureUrlEvents(
|
public static void configureUrlEvents(
|
||||||
WebEngine engine, TextField urlField, Label securityLabel) {
|
WebEngine engine, TextField urlField, Label securityLabel) {
|
||||||
@@ -417,11 +415,11 @@ public class CasinoBrowserController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Scene erstellen
|
* Create a scene
|
||||||
*
|
*
|
||||||
* @param taskbar Taskbar HBox
|
* @param taskbar Taskbar HBox
|
||||||
* @param webContainer Web Container
|
* @param webContainer Web container
|
||||||
* @return Scene Fenster
|
* @return Scene window
|
||||||
*/
|
*/
|
||||||
public static Scene createScene(HBox taskbar, StackPane webContainer) {
|
public static Scene createScene(HBox taskbar, StackPane webContainer) {
|
||||||
VBox root = new VBox(VBOX_SPACING, taskbar, webContainer);
|
VBox root = new VBox(VBOX_SPACING, taskbar, webContainer);
|
||||||
@@ -442,8 +440,8 @@ public class CasinoBrowserController {
|
|||||||
/**
|
/**
|
||||||
* Key Events
|
* Key Events
|
||||||
*
|
*
|
||||||
* @param scene Scene Fenster
|
* @param scene Scene window
|
||||||
* @param engine WebEngine nutzen
|
* @param engine Use WebEngine
|
||||||
*/
|
*/
|
||||||
public static void configureKeyEvents(Scene scene, WebEngine engine) {
|
public static void configureKeyEvents(Scene scene, WebEngine engine) {
|
||||||
scene.setOnKeyPressed(
|
scene.setOnKeyPressed(
|
||||||
@@ -455,18 +453,18 @@ public class CasinoBrowserController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Lädt eine URL in den Browser, nachdem grundlegende Sicherheitsprüfungen durchgeführt wurden.
|
* Loads a URL in the browser after performing basic security checks.
|
||||||
*
|
*
|
||||||
* <p>Vor dem Laden einer Seite werden folgende Prüfungen durchgeführt: - Überprüfung des
|
* <p>Before loading a page, the following checks are performed: - Verification of the
|
||||||
* Protokolls (nur HTTPS erlaubt) - Überprüfung der Domain gegen eine Whitelist - Schutz vor
|
* protocol (only HTTPS allowed) - Verification of the domain against a whitelist - Protection against
|
||||||
* Domain-Spoofing (Domain-Vortäuschung)
|
* domain spoofing
|
||||||
*
|
*
|
||||||
* <p>Falls eine Domain nicht als vertrauenswürdig eingestuft wird, muss der Benutzer
|
* <p>If a domain is not classified as trustworthy, the user must
|
||||||
* bestätigen, dass die Seite dennoch geöffnet werden darf.
|
* confirm that the page may still be opened.
|
||||||
*
|
*
|
||||||
* @param engine der WebEngine-Renderer des Browsers
|
* @param engine the browser's WebEngine renderer
|
||||||
* @param url die zu ladende Webadresse
|
* @param url the web address to be loaded
|
||||||
* @param securityLabel Label zur Anzeige des aktuellen Sicherheitsstatus
|
* @param securityLabel label for displaying the current security status
|
||||||
*/
|
*/
|
||||||
private static void loadUrlSafely(WebEngine engine, String url, Label securityLabel) {
|
private static void loadUrlSafely(WebEngine engine, String url, Label securityLabel) {
|
||||||
try {
|
try {
|
||||||
@@ -476,9 +474,9 @@ public class CasinoBrowserController {
|
|||||||
|
|
||||||
URI uri = new URI(url);
|
URI uri = new URI(url);
|
||||||
|
|
||||||
// HTTPS Pflicht
|
// HTTPS required
|
||||||
if (!"https".equalsIgnoreCase(uri.getScheme())) {
|
if (!"https".equalsIgnoreCase(uri.getScheme())) {
|
||||||
securityLabel.setText("BLOCKIERT");
|
securityLabel.setText("BLOCKED");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -488,19 +486,19 @@ public class CasinoBrowserController {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sicherer Domain Check
|
// Secure Domain Check
|
||||||
boolean trusted =
|
boolean trusted =
|
||||||
TRUSTED_DOMAINS.stream()
|
TRUSTED_DOMAINS.stream()
|
||||||
.anyMatch(domain -> host.equals(domain) || host.endsWith("." + domain));
|
.anyMatch(domain -> host.equals(domain) || host.endsWith("." + domain));
|
||||||
|
|
||||||
if (!trusted) {
|
if (!trusted) {
|
||||||
if (!showUnknownWebsiteAlert(host)) {
|
if (!showUnknownWebsiteAlert(host)) {
|
||||||
securityLabel.setText("BLOCKIERT");
|
securityLabel.setText("BLOCKED");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
securityLabel.setText("UNBEKANNT");
|
securityLabel.setText("UNBEKANNT");
|
||||||
} else {
|
} else {
|
||||||
securityLabel.setText("SICHER");
|
securityLabel.setText("SAFE");
|
||||||
}
|
}
|
||||||
engine.load(uri.toString());
|
engine.load(uri.toString());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -509,20 +507,20 @@ public class CasinoBrowserController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Zeigt Warnung an.
|
* Displays a warning.
|
||||||
*
|
*
|
||||||
* @param host Website Host
|
* @param host Website host
|
||||||
* @return OK gedrückt
|
* @return OK pressed
|
||||||
*/
|
*/
|
||||||
private static boolean showUnknownWebsiteAlert(String host) {
|
private static boolean showUnknownWebsiteAlert(String host) {
|
||||||
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
|
Alert alert = new Alert(Alert.AlertType.CONFIRMATION);
|
||||||
|
|
||||||
alert.setTitle("Unbekannte Website");
|
alert.setTitle("Unknown website");
|
||||||
alert.setHeaderText("Diese Website ist nicht bekannt");
|
alert.setHeaderText("This website is unknown");
|
||||||
String content =
|
String content =
|
||||||
host
|
host
|
||||||
+ "\n\nDiese Seite ist nicht vom Casono Browser verifiziert.\n"
|
+ "\n\nThis site has not been verified by the Casono browser.\n"
|
||||||
+ "Möchten Sie sie trotzdem öffnen?";
|
+ "Do you still want to open it?";
|
||||||
alert.setContentText(content);
|
alert.setContentText(content);
|
||||||
|
|
||||||
var stream = CasinoBrowserController.class.getResourceAsStream(LOGO_PATH);
|
var stream = CasinoBrowserController.class.getResourceAsStream(LOGO_PATH);
|
||||||
|
|||||||
+30
-29
@@ -11,14 +11,15 @@ import org.apache.logging.log4j.LogManager;
|
|||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Controller für die interaktive Taskleiste innerhalb der Poker-UI.
|
* Controller for the interactive taskbar within the poker UI.
|
||||||
*
|
*
|
||||||
* <p>Verantwortlich für: - Drag-and-Drop-Verschieben der Taskleiste, - Eingabe und Verwaltung von
|
* Responsible for: - Drag-and-drop movement of the taskbar,
|
||||||
* Spieleinsätzen, - Steuerung allgemeiner Menüfunktionen wie Exit.
|
* - Input and management of game stakes, - Control of general
|
||||||
|
* menu functions such as Exit.
|
||||||
*/
|
*/
|
||||||
public class TaskbarController {
|
public class TaskbarController {
|
||||||
|
|
||||||
/** Standardkonstruktor. Wird von FXML verwendet. */
|
/** Standard constructor. Used by FXML. */
|
||||||
public TaskbarController() {
|
public TaskbarController() {
|
||||||
// default constructor for FXML
|
// default constructor for FXML
|
||||||
}
|
}
|
||||||
@@ -36,10 +37,10 @@ public class TaskbarController {
|
|||||||
private static final int CREDIT_STEP = 5;
|
private static final int CREDIT_STEP = 5;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wird aufgerufen, wenn die Taskleiste mit der Maus gedrückt wird. Speichert die relative
|
* Called when the taskbar is clicked with the mouse. Saves the relative
|
||||||
* Position, um später korrekt zu verschieben.
|
* position for later, correct repositioning.
|
||||||
*
|
*
|
||||||
* @param event Das Mausereignis
|
* @param event The mouse event
|
||||||
*/
|
*/
|
||||||
@FXML
|
@FXML
|
||||||
private void onTaskbarPressed(MouseEvent event) {
|
private void onTaskbarPressed(MouseEvent event) {
|
||||||
@@ -48,11 +49,11 @@ public class TaskbarController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wird aufgerufen, während die Taskleiste mit der Maus gezogen wird. Aktualisiert die Position
|
* Called while dragging the taskbar with the mouse. Updates the position
|
||||||
* und skaliert die Taskleiste leicht zur visuellen Rückmeldung.
|
* and slightly scales the taskbar for visual feedback.
|
||||||
*
|
*
|
||||||
* <p>TODO: Es muss noch gefixt werden, dass die Taskleiste nicht aus dem Fenster verschwinden
|
* <p>TODO: It still needs to be fixed that the taskbar cannot disappear out
|
||||||
* kann.
|
* of the window.
|
||||||
*
|
*
|
||||||
* @param event Das Mausereignis
|
* @param event Das Mausereignis
|
||||||
*/
|
*/
|
||||||
@@ -66,10 +67,10 @@ public class TaskbarController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wird aufgerufen, wenn die Maus über der Taskleiste losgelassen wird. Setzt die Skalierung der
|
* Called when the mouse cursor is released over the taskbar. Resets the
|
||||||
* Taskleiste wieder auf Normalgröße.
|
* taskbar scaling to normal size.
|
||||||
*
|
*
|
||||||
* @param event Das Mausereignis
|
* @param event The mouse event
|
||||||
*/
|
*/
|
||||||
@FXML
|
@FXML
|
||||||
private void onTaskbarReleased(MouseEvent event) {
|
private void onTaskbarReleased(MouseEvent event) {
|
||||||
@@ -78,9 +79,9 @@ public class TaskbarController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wird aufgerufen, wenn im Textfeld die Enter-Taste gedrückt wird.
|
* Called up when the Enter key is pressed in the text field.
|
||||||
*
|
*
|
||||||
* @param event Das Tastaturereignis
|
* @param event The keyboard event
|
||||||
*/
|
*/
|
||||||
@FXML
|
@FXML
|
||||||
private void onInputSubmitted(KeyEvent event) {
|
private void onInputSubmitted(KeyEvent event) {
|
||||||
@@ -90,8 +91,8 @@ public class TaskbarController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Wird aufgerufen, wenn der Submit-Button in der Taskleiste gedrückt wird. Löst die
|
* Called when the submit button in the taskbar is pressed. Triggers the
|
||||||
* Verarbeitung des Einsatzes aus.
|
* processing of the deployment.
|
||||||
*/
|
*/
|
||||||
@FXML
|
@FXML
|
||||||
private void onInputSubmittedAction() {
|
private void onInputSubmittedAction() {
|
||||||
@@ -106,7 +107,7 @@ public class TaskbarController {
|
|||||||
javafx.stage.Stage currentStage =
|
javafx.stage.Stage currentStage =
|
||||||
(javafx.stage.Stage) taskbar.getScene().getWindow();
|
(javafx.stage.Stage) taskbar.getScene().getWindow();
|
||||||
currentStage.close();
|
currentStage.close();
|
||||||
// Lobby-UI starten
|
// Start lobby UI
|
||||||
try {
|
try {
|
||||||
new Casinomainui().start(new javafx.stage.Stage());
|
new Casinomainui().start(new javafx.stage.Stage());
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@@ -116,9 +117,9 @@ public class TaskbarController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Verarbeitet den im Textfeld eingegebenen Einsatz. Es werden ausschließlich ganzzahlige Werte
|
* Processes the stake entered in the text field. Only integer values between 5
|
||||||
* im Bereich von 5 bis 100.000 Credits akzeptiert, die einem Vielfachen von 5 entsprechen
|
* and 100,000 credits are accepted, in multiples of 5 (in increments of 5).
|
||||||
* (5er-Schritte). Der Einsatz wird aktuell nur auf der Konsole ausgegeben.
|
* The stake is currently only displayed on the console.
|
||||||
*/
|
*/
|
||||||
private void processBet() {
|
private void processBet() {
|
||||||
String input = taskbarInput.getText();
|
String input = taskbarInput.getText();
|
||||||
@@ -126,22 +127,22 @@ public class TaskbarController {
|
|||||||
int credits = Integer.parseInt(input.trim());
|
int credits = Integer.parseInt(input.trim());
|
||||||
|
|
||||||
if (credits >= MIN_CREDITS && credits <= MAX_CREDITS && credits % CREDIT_STEP == 0) {
|
if (credits >= MIN_CREDITS && credits <= MAX_CREDITS && credits % CREDIT_STEP == 0) {
|
||||||
// TODO: Credits müssen an die GameEngine gesendet werden
|
// TODO: Credits must be sent to the GameEngine
|
||||||
LOGGER.info("Einsatz gesetzt: {} Casono Credits", credits);
|
LOGGER.info("Bet set: {} Casono Credits", credits);
|
||||||
taskbarInput.clear();
|
taskbarInput.clear();
|
||||||
} else {
|
} else {
|
||||||
LOGGER.info("Fehler: Nur 5er-Schritte (5, 10, ... 100.000) erlaubt!");
|
LOGGER.error("Error: Only increments of 5 (5, 10, ... 100,000) are allowed!");
|
||||||
}
|
}
|
||||||
} catch (NumberFormatException e) {
|
} catch (NumberFormatException e) {
|
||||||
LOGGER.info("Fehler: Bitte nur eine Zahl eingeben!");
|
LOGGER.error("Error: Please enter only one number!");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Öffnet den integrierten Casono Webbrowser.
|
* Opens the integrated Casono web browser.
|
||||||
*
|
*
|
||||||
* <p>TODO: Ersetze die Start-URL durch die offizielle Projekt-Website (z.B. Tipps & Tricks
|
* <p> TODO: Replace the start URL with the official project website
|
||||||
* Seite), sobald die Inhalte für Strategien und Support bereitstehen.
|
* (e.g., Tips & Tricks page) once the content for strategies and support is available.
|
||||||
*/
|
*/
|
||||||
@FXML
|
@FXML
|
||||||
private void onBrowserButtonClick() {
|
private void onBrowserButtonClick() {
|
||||||
|
|||||||
Reference in New Issue
Block a user