diff --git a/.idea/artifacts/Client_jar.xml b/.idea/artifacts/Client_jar.xml index 563a75d..defd9ad 100644 --- a/.idea/artifacts/Client_jar.xml +++ b/.idea/artifacts/Client_jar.xml @@ -4,7 +4,7 @@ - + diff --git a/Client/src/game/TicTacToe_Client.java b/Client/src/game/TicTacToe_Client.java index 098836a..d88b917 100644 --- a/Client/src/game/TicTacToe_Client.java +++ b/Client/src/game/TicTacToe_Client.java @@ -23,21 +23,21 @@ public class TicTacToe_Client extends Application { Client client; Scene scene; - private void initializeGrid(){ + private void initializeGrid() { grid = new GridPane(); - grid.setMinSize(900,900); + grid.setMinSize(900, 900); grid.setAlignment(Pos.CENTER); grid.setHgap(150); grid.setVgap(75); } - private void drawCross(int column, int row){ + private void drawCross(int column, int row) { Text cross = new Text("X"); cross.setFont(Font.font("Tahoma", FontWeight.NORMAL, 200)); grid.add(cross, column, row); } - private void drawCircle(int column, int row){ + private void drawCircle(int column, int row) { Text circle = new Text("O"); circle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 200)); grid.add(circle, column, row); @@ -49,17 +49,17 @@ public class TicTacToe_Client extends Application { grid.add(emptyField, column, row); } - private void drawBoard(String gameState){ - if (gameState.length() != 9){ + private void drawBoard(String gameState) { + if (gameState.length() != 9) { System.err.println("Wrong length of gameState string"); return; } - for (int i = 0; i < gameState.length(); i++){ + for (int i = 0; i < gameState.length(); i++) { int column = i / 3; int row = i % 3; - if (gameState.charAt(i) == 'x'){ + if (gameState.charAt(i) == 'x') { this.drawCross(column, row); - } else if (gameState.charAt(i) == 'o'){ + } else if (gameState.charAt(i) == 'o') { this.drawCircle(column, row); } else { this.drawEmptyField(column, row); @@ -68,7 +68,7 @@ public class TicTacToe_Client extends Application { } } - private Scene setScene(){ + private Scene setScene() { scene = new Scene(grid, 900, 900); scene.getStylesheets().add (TicTacToe_Client.class.getResource("TicTacToe_Client.css").toExternalForm()); @@ -81,19 +81,20 @@ public class TicTacToe_Client extends Application { return scene; } - private void onMouseClick(MouseEvent event){ + private void onMouseClick(MouseEvent event) { client.sendToServer("update"); client.sendToServer(String.format("%f|%f", event.getX(), event.getY())); String gameState = client.getResponse(); + System.out.println(gameState); if (gameState.length() == 9) { drawBoard(gameState); - if (!client.getGameEnded()){ + if (!client.getGameEnded()) { gameState = client.getResponse(); drawBoard(gameState); } else { LinkedList winCoordinates = new LinkedList<>(); String response = client.getResponse(); - for (String s: Arrays.copyOfRange(response.split(";"),0, 4)) { + for (String s : Arrays.copyOfRange(response.split(";"), 0, 4)) { winCoordinates.add(Integer.valueOf(s) * 300); } this.drawWinningLine(winCoordinates); @@ -106,24 +107,22 @@ public class TicTacToe_Client extends Application { } } - private void drawWinningLine(LinkedListwinCoordinates){ + private void drawWinningLine(LinkedList winCoordinates) { Line winningLine = new Line(winCoordinates.get(0), winCoordinates.get(1), winCoordinates.get(2), winCoordinates.get(3)); winningLine.setFill(Color.RED); - grid.add(winningLine, winCoordinates.get(0)/300, winCoordinates.get(1)/300, 3, 3); + grid.add(winningLine, winCoordinates.get(0) / 300, winCoordinates.get(1) / 300, 3, 3); } @Override public void start(Stage primaryStage) { - client = new Client("localhost", 2589, "TestClient"); + client = new Client("server", 2589, "Cato"); client.handshake(); primaryStage.setTitle("TicTacToe"); primaryStage.setResizable(false); this.initializeGrid(); - primaryStage.setScene(this.setScene()); - primaryStage.show(); this.drawBoard(client.getGameState()); @@ -132,4 +131,5 @@ public class TicTacToe_Client extends Application { public static void main(String[] args) { launch(args); } + } diff --git a/Server/src/game/TicTacToe_Server.java b/Server/src/game/TicTacToe_Server.java index f21b925..ab30ef6 100644 --- a/Server/src/game/TicTacToe_Server.java +++ b/Server/src/game/TicTacToe_Server.java @@ -34,16 +34,16 @@ public class TicTacToe_Server { board = this.convertToNumbers(gameState); } - public int makeClientMove(String input) { + public boolean makeClientMove(String input) { int column = Double.valueOf(input.split("\\|")[0]).intValue() / 300; int row = Double.valueOf(input.split("\\|")[1]).intValue() / 300; int index = column * 3 + row; if (isLegalMove(column, row)) { makeMoveOnBoard(index, 0); - return 200; + return true; } else { - return 404; + return false; } } diff --git a/Server/src/networking/MultiPlayerServer.java b/Server/src/networking/MultiPlayerServer.java index d369556..7cab212 100644 --- a/Server/src/networking/MultiPlayerServer.java +++ b/Server/src/networking/MultiPlayerServer.java @@ -81,22 +81,22 @@ public class MultiPlayerServer { } public void ticTacToe_gameloop() { - for (Socket client : clients.values()) { - try { - while (!client.isClosed()) { - String message = instreams.get(client).readUTF(); - serverLogger.printLog(message, clientNames.get(client), LogType.Message); - outstreams.get(client).writeInt(200); - outstreams.get(client).flush(); - serverLogger.printLog("Sent verification code", clientNames.get(client), LogType.Log); - this.gameFlow(message, client); - } - } catch (IOException e) { - e.printStackTrace(); + while(clients.size() == 2) { + for (Socket client : clients.values()) { try { - client.close(); - } catch (IOException ioException) { - ioException.printStackTrace(); + String message = instreams.get(client).readUTF(); + serverLogger.printLog(message, clientNames.get(client), LogType.Message); + outstreams.get(client).writeInt(200); + outstreams.get(client).flush(); + serverLogger.printLog("Sent verification code", clientNames.get(client), LogType.Log); + this.gameFlow(message, client); + } catch (IOException e) { + e.printStackTrace(); + try { + client.close(); + } catch (IOException ioException) { + ioException.printStackTrace(); + } } } } @@ -121,8 +121,8 @@ public class MultiPlayerServer { outstreams.get(client).writeInt(200); outstreams.get(client).flush(); serverLogger.printLog("Sent verification code", clientNames.get(client), LogType.Log); - int verificationCode = ticTacToe_server.makeClientMove(position); - if (verificationCode == 200) { + boolean isAllowed = ticTacToe_server.makeClientMove(position); + if (isAllowed) { String gameState = ticTacToe_server.getGameState(); outstreams.get(client).writeUTF(gameState); outstreams.get(client).flush(); diff --git a/Server/src/networking/SinglePlayerServer.java b/Server/src/networking/SinglePlayerServer.java index b75cd1b..3c12f99 100644 --- a/Server/src/networking/SinglePlayerServer.java +++ b/Server/src/networking/SinglePlayerServer.java @@ -121,8 +121,8 @@ public class SinglePlayerServer { outstreams.get(client).writeInt(200); outstreams.get(client).flush(); serverLogger.printLog("Sent verification code", clientNames.get(client), LogType.Log); - int verificationCode = ticTacToe_server.makeClientMove(position); - if (verificationCode == 200) { + boolean moveAllowed = ticTacToe_server.makeClientMove(position); + if (moveAllowed) { String gameState = ticTacToe_server.getGameState(); outstreams.get(client).writeUTF(gameState); outstreams.get(client).flush(); diff --git a/deployment/multiplayer/buildMultiServer.sh b/deployment/multiplayer/buildMultiServer.sh new file mode 100755 index 0000000..b040c6a --- /dev/null +++ b/deployment/multiplayer/buildMultiServer.sh @@ -0,0 +1,7 @@ +#!/bin/bash +cd /home/cato447/Code/ArcadeMachine/out/production/Server/ +jar cmvf META-INF/multiServerManifest.MF multiServer.jar * +scp multiServer.jar root@server:/root +rm multiServer.jar +cd /home/cato447/Code/ArcadeMachine/deployment/multiplayer/ +./startMultiServer.sh \ No newline at end of file diff --git a/deployment/multiplayer/startMultiServer.sh b/deployment/multiplayer/startMultiServer.sh new file mode 100755 index 0000000..068393e --- /dev/null +++ b/deployment/multiplayer/startMultiServer.sh @@ -0,0 +1,2 @@ +#!/bin/bash +ssh root@server ./startMultiServer.sh \ No newline at end of file diff --git a/deployment/singleplayer/buildSingleServer.sh b/deployment/singleplayer/buildSingleServer.sh new file mode 100755 index 0000000..292da74 --- /dev/null +++ b/deployment/singleplayer/buildSingleServer.sh @@ -0,0 +1,7 @@ +#!/bin/bash +cd /home/cato447/Code/ArcadeMachine/out/production/Server/ +jar cmvf META-INF/MANIFEST.MF singleServer.jar * +scp singleServer.jar root@server:/root +rm singleServer.jar +cd /home/cato447/Code/ArcadeMachine/deployment/singleplayer/ +./startSingleServer.sh \ No newline at end of file diff --git a/deployment/singleplayer/startSingleServer.sh b/deployment/singleplayer/startSingleServer.sh new file mode 100755 index 0000000..dfc43f5 --- /dev/null +++ b/deployment/singleplayer/startSingleServer.sh @@ -0,0 +1,2 @@ +#!/bin/bash +ssh root@server ./startSingleServer.sh \ No newline at end of file diff --git a/out/production/ArcadeMachine/META-INF/MANIFEST.MF b/out/production/ArcadeMachine/META-INF/MANIFEST.MF index d7e01d2..01f4484 100644 --- a/out/production/ArcadeMachine/META-INF/MANIFEST.MF +++ b/out/production/ArcadeMachine/META-INF/MANIFEST.MF @@ -1,3 +1,6 @@ Manifest-Version: 1.0 -Main-Class: client.networking.Client +Main-Class: Launcher +Class-Path: src.zip javafx-swt.jar javafx.web.jar javafx.base.jar javafx + .fxml.jar javafx.media.jar javafx.swing.jar javafx.controls.jar javafx. + graphics.jar diff --git a/out/production/Server/META-INF/MANIFEST.MF b/out/production/Server/META-INF/MANIFEST.MF index b764489..de9a291 100644 --- a/out/production/Server/META-INF/MANIFEST.MF +++ b/out/production/Server/META-INF/MANIFEST.MF @@ -1,3 +1,2 @@ Manifest-Version: 1.0 Main-Class: networking.SinglePlayerServer - diff --git a/out/production/Server/META-INF/multiServerManifest.MF b/out/production/Server/META-INF/multiServerManifest.MF new file mode 100644 index 0000000..22f7c6e --- /dev/null +++ b/out/production/Server/META-INF/multiServerManifest.MF @@ -0,0 +1,2 @@ +Manifest-Version: 1.0 +Main-Class: networking.MultiPlayerServer diff --git a/Server/res/META-INF/MANIFEST.MF b/out/production/Server/META-INF/singleServerManifest.MF similarity index 94% rename from Server/res/META-INF/MANIFEST.MF rename to out/production/Server/META-INF/singleServerManifest.MF index b764489..de9a291 100644 --- a/Server/res/META-INF/MANIFEST.MF +++ b/out/production/Server/META-INF/singleServerManifest.MF @@ -1,3 +1,2 @@ Manifest-Version: 1.0 Main-Class: networking.SinglePlayerServer -