From 224851ce2c711012d849636d9b53312a1b791bb4 Mon Sep 17 00:00:00 2001 From: EpicKnarvik97 Date: Tue, 28 Apr 2020 11:55:20 +0200 Subject: [PATCH] =?UTF-8?q?Oppdaterer=20behandling=20av=20nettverk=20for?= =?UTF-8?q?=20=C3=A5=20st=C3=B8tte=20egendefinert=20serverport?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Lar brukeren velge server port på startmenyen Lar brukeren spesifisere en port etter et kolon når den spesifiserer IP på serveren som skal kobles til Legger til beskrivende tekst til valg av ip addresse Bytter til å bruke en port for både TCP og UDP --- .../gamewrapper/RoboRallyWrapper.java | 3 +-- .../gamewrapper/screens/IPAddressScreen.java | 19 +++++++++++++++---- .../gamewrapper/screens/StartMenuScreen.java | 17 ++++++++++++++--- .../roborally/networking/RoboRallyClient.java | 7 +++---- .../roborally/networking/RoboRallyServer.java | 7 +++---- 5 files changed, 36 insertions(+), 17 deletions(-) diff --git a/src/main/java/inf112/fiasko/roborally/gamewrapper/RoboRallyWrapper.java b/src/main/java/inf112/fiasko/roborally/gamewrapper/RoboRallyWrapper.java index 97d9434..5ce74de 100644 --- a/src/main/java/inf112/fiasko/roborally/gamewrapper/RoboRallyWrapper.java +++ b/src/main/java/inf112/fiasko/roborally/gamewrapper/RoboRallyWrapper.java @@ -12,8 +12,7 @@ import inf112.fiasko.roborally.objects.RoboRallyGame; * This class acts as a wrapper around the different screens of the game */ public class RoboRallyWrapper extends Game implements RoboRallyUI { - public final int defaultTCPPort = 54555; - public final int discoverUDPPort = 54777; + public int networkPort = 54555; public SpriteBatch batch; public BitmapFont font; public ScreenManager screenManager; diff --git a/src/main/java/inf112/fiasko/roborally/gamewrapper/screens/IPAddressScreen.java b/src/main/java/inf112/fiasko/roborally/gamewrapper/screens/IPAddressScreen.java index 2161e62..c08e635 100644 --- a/src/main/java/inf112/fiasko/roborally/gamewrapper/screens/IPAddressScreen.java +++ b/src/main/java/inf112/fiasko/roborally/gamewrapper/screens/IPAddressScreen.java @@ -37,14 +37,15 @@ public class IPAddressScreen extends AbstractScreen { joinButton.setSize(300, 60); joinButton.setPosition(applicationWidth / 2f - joinButton.getWidth() / 2f, 300); roboRallyWrapper.client = new RoboRallyClient(roboRallyWrapper); - List lanServers = roboRallyWrapper.client.getLanServers(roboRallyWrapper.discoverUDPPort); + + List lanServers = roboRallyWrapper.client.getLanServers(roboRallyWrapper.networkPort); Set validHosts = new HashSet<>(); for (InetAddress address : lanServers) { validHosts.add(address.getHostAddress()); } final SelectBox selectBox = new SelectBox<>(skin); selectBox.setItems(validHosts.toArray(new String[0])); - selectBox.setPosition(-80 + (applicationWidth - selectBox.getWidth()) / 2f, 200); + selectBox.setPosition(-80 + (applicationWidth - selectBox.getWidth()) / 2f, 180); selectBox.setSize(200, 50); stage.addActor(selectBox); @@ -60,15 +61,21 @@ public class IPAddressScreen extends AbstractScreen { public void touchUp(InputEvent e, float x, float y, int point, int button) { try { String serverIp; + int serverPort = roboRallyWrapper.networkPort; String writtenIP = textInput.getText(); if (writtenIP.isEmpty()) { serverIp = selectBox.getSelected(); } else { serverIp = writtenIP; + if (serverIp.contains(":")) { + String[] ipParts = serverIp.split(":"); + serverIp = ipParts[0]; + serverPort = Integer.parseInt(ipParts[1]); + } } - roboRallyWrapper.client.connect(serverIp, roboRallyWrapper.defaultTCPPort, roboRallyWrapper.discoverUDPPort); + roboRallyWrapper.client.connect(serverIp, serverPort); roboRallyWrapper.setScreen(roboRallyWrapper.screenManager.getUsernameScreen(roboRallyWrapper)); - } catch (IOException ex) { + } catch (IOException | NumberFormatException ex) { JOptionPane.showMessageDialog(null, "Could not connect to the server." + " Please make sure the ip address you typed is correct, and that the server is online."); } @@ -96,6 +103,10 @@ public class IPAddressScreen extends AbstractScreen { "join a server", applicationWidth / 2f - 380 / 2f, applicationHeight / 2f + 100, 380, 1, true); + roboRallyWrapper.font.draw(roboRallyWrapper.batch, "Specify IP", + 10, 280, 200, 1, true); + roboRallyWrapper.font.draw(roboRallyWrapper.batch, "Local servers", + 10, 230, 200, 1, true); roboRallyWrapper.batch.end(); } diff --git a/src/main/java/inf112/fiasko/roborally/gamewrapper/screens/StartMenuScreen.java b/src/main/java/inf112/fiasko/roborally/gamewrapper/screens/StartMenuScreen.java index 835f4f2..ecf0586 100644 --- a/src/main/java/inf112/fiasko/roborally/gamewrapper/screens/StartMenuScreen.java +++ b/src/main/java/inf112/fiasko/roborally/gamewrapper/screens/StartMenuScreen.java @@ -2,7 +2,9 @@ package inf112.fiasko.roborally.gamewrapper.screens; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.scenes.scene2d.InputEvent; +import com.badlogic.gdx.scenes.scene2d.ui.Skin; import com.badlogic.gdx.scenes.scene2d.ui.TextButton; +import com.badlogic.gdx.scenes.scene2d.ui.TextField; import com.badlogic.gdx.scenes.scene2d.utils.ClickListener; import com.badlogic.gdx.utils.viewport.FitViewport; import inf112.fiasko.roborally.gamewrapper.RoboRallyWrapper; @@ -17,6 +19,7 @@ import java.io.IOException; */ public class StartMenuScreen extends AbstractScreen { private final RoboRallyWrapper roboRallyWrapper; + private TextField textInput; /** * Instantiates a new start menu screen @@ -31,6 +34,14 @@ public class StartMenuScreen extends AbstractScreen { serverButton.setY(applicationHeight / 2f); this.roboRallyWrapper = roboRallyWrapper; camera.setToOrtho(false, applicationWidth, applicationHeight); + + Skin skin = new Skin(Gdx.files.internal("uiskin.json")); + textInput = new TextField("", skin); + textInput.setSize(60, 40); + textInput.setPosition(applicationWidth / 2f - 130, applicationHeight / 2f - textInput.getHeight() - 10); + textInput.setText(String.valueOf(roboRallyWrapper.networkPort)); + stage.addActor(textInput); + serverButton.addListener(new ClickListener() { @Override public boolean touchDown(InputEvent e, float x, float y, int point, int button) { @@ -40,9 +51,10 @@ public class StartMenuScreen extends AbstractScreen { @Override public void touchUp(InputEvent event, float x, float y, int pointer, int button) { try { - roboRallyWrapper.server = new RoboRallyServer(roboRallyWrapper.defaultTCPPort, roboRallyWrapper.discoverUDPPort); + roboRallyWrapper.networkPort = Integer.parseInt(textInput.getText()); + roboRallyWrapper.server = new RoboRallyServer(roboRallyWrapper.networkPort); roboRallyWrapper.client = new RoboRallyClient(roboRallyWrapper); - roboRallyWrapper.client.connect("127.0.0.1", roboRallyWrapper.defaultTCPPort, roboRallyWrapper.discoverUDPPort); + roboRallyWrapper.client.connect("127.0.0.1", roboRallyWrapper.networkPort); roboRallyWrapper.setScreen(roboRallyWrapper.screenManager.getUsernameScreen(roboRallyWrapper)); } catch (IOException e) { //Hard fail @@ -86,7 +98,6 @@ public class StartMenuScreen extends AbstractScreen { serverButton.setX(applicationWidth / 2f - serverButton.getWidth() - clientButton.getWidth() / 2 - 10); clientButton.setX(applicationWidth / 2f - clientButton.getWidth() / 2); quitButton.setX(applicationWidth / 2f + clientButton.getWidth() / 2 + 10); - } @Override diff --git a/src/main/java/inf112/fiasko/roborally/networking/RoboRallyClient.java b/src/main/java/inf112/fiasko/roborally/networking/RoboRallyClient.java index 8bfcce0..2d1d401 100644 --- a/src/main/java/inf112/fiasko/roborally/networking/RoboRallyClient.java +++ b/src/main/java/inf112/fiasko/roborally/networking/RoboRallyClient.java @@ -32,12 +32,11 @@ public class RoboRallyClient { * Connects to a Robo Rally server * * @param ipAddress The ip address of the server to join - * @param TCPPort The TCP port to connect to - * @param UDPPort The UDP port to connect to + * @param serverPort The port the server is hosted on * @throws IOException If the server cannot be connected to */ - public void connect(String ipAddress, int TCPPort, int UDPPort) throws IOException { - client.connect(5000, ipAddress, TCPPort, UDPPort); + public void connect(String ipAddress, int serverPort) throws IOException { + client.connect(5000, ipAddress, serverPort, serverPort); } /** diff --git a/src/main/java/inf112/fiasko/roborally/networking/RoboRallyServer.java b/src/main/java/inf112/fiasko/roborally/networking/RoboRallyServer.java index 9bb29ff..f58ff6a 100644 --- a/src/main/java/inf112/fiasko/roborally/networking/RoboRallyServer.java +++ b/src/main/java/inf112/fiasko/roborally/networking/RoboRallyServer.java @@ -19,15 +19,14 @@ public class RoboRallyServer { /** * Instantiates a new Robo Rally server * - * @param TCPPort The TCP port to bind to - * @param UDPPort The UDP port to bind to + * @param serverPort The port the server should listen on * @throws IOException If the server cannot be started */ - public RoboRallyServer(int TCPPort, int UDPPort) throws IOException { + public RoboRallyServer(int serverPort) throws IOException { server = new Server(); server.start(); NetworkUtil.registerClasses(server.getKryo()); - server.bind(TCPPort, UDPPort); + server.bind(serverPort, serverPort); listener = new RoboRallyServerListener(this); server.addListener(listener); }