Added support for easy deployment to offsite server

This commit is contained in:
2021-02-28 05:01:54 +01:00
parent 81c17b2cc1
commit bc0345f061
13 changed files with 65 additions and 44 deletions

View File

@@ -4,7 +4,7 @@
<root id="root"> <root id="root">
<element id="archive" name="Client.jar"> <element id="archive" name="Client.jar">
<element id="directory" name="META-INF"> <element id="directory" name="META-INF">
<element id="file-copy" path="$PROJECT_DIR$/src/META-INF/MANIFEST.MF" /> <element id="file-copy" path="$PROJECT_DIR$/src/META-INF/MANIFEST.MF" output-file-name="singeleServerManifest.MF" />
</element> </element>
<element id="module-output" name="Client" /> <element id="module-output" name="Client" />
</element> </element>

View File

@@ -23,21 +23,21 @@ public class TicTacToe_Client extends Application {
Client client; Client client;
Scene scene; Scene scene;
private void initializeGrid(){ private void initializeGrid() {
grid = new GridPane(); grid = new GridPane();
grid.setMinSize(900,900); grid.setMinSize(900, 900);
grid.setAlignment(Pos.CENTER); grid.setAlignment(Pos.CENTER);
grid.setHgap(150); grid.setHgap(150);
grid.setVgap(75); grid.setVgap(75);
} }
private void drawCross(int column, int row){ private void drawCross(int column, int row) {
Text cross = new Text("X"); Text cross = new Text("X");
cross.setFont(Font.font("Tahoma", FontWeight.NORMAL, 200)); cross.setFont(Font.font("Tahoma", FontWeight.NORMAL, 200));
grid.add(cross, column, row); grid.add(cross, column, row);
} }
private void drawCircle(int column, int row){ private void drawCircle(int column, int row) {
Text circle = new Text("O"); Text circle = new Text("O");
circle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 200)); circle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 200));
grid.add(circle, column, row); grid.add(circle, column, row);
@@ -49,17 +49,17 @@ public class TicTacToe_Client extends Application {
grid.add(emptyField, column, row); grid.add(emptyField, column, row);
} }
private void drawBoard(String gameState){ private void drawBoard(String gameState) {
if (gameState.length() != 9){ if (gameState.length() != 9) {
System.err.println("Wrong length of gameState string"); System.err.println("Wrong length of gameState string");
return; return;
} }
for (int i = 0; i < gameState.length(); i++){ for (int i = 0; i < gameState.length(); i++) {
int column = i / 3; int column = i / 3;
int row = i % 3; int row = i % 3;
if (gameState.charAt(i) == 'x'){ if (gameState.charAt(i) == 'x') {
this.drawCross(column, row); this.drawCross(column, row);
} else if (gameState.charAt(i) == 'o'){ } else if (gameState.charAt(i) == 'o') {
this.drawCircle(column, row); this.drawCircle(column, row);
} else { } else {
this.drawEmptyField(column, row); 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 = new Scene(grid, 900, 900);
scene.getStylesheets().add scene.getStylesheets().add
(TicTacToe_Client.class.getResource("TicTacToe_Client.css").toExternalForm()); (TicTacToe_Client.class.getResource("TicTacToe_Client.css").toExternalForm());
@@ -81,19 +81,20 @@ public class TicTacToe_Client extends Application {
return scene; return scene;
} }
private void onMouseClick(MouseEvent event){ private void onMouseClick(MouseEvent event) {
client.sendToServer("update"); client.sendToServer("update");
client.sendToServer(String.format("%f|%f", event.getX(), event.getY())); client.sendToServer(String.format("%f|%f", event.getX(), event.getY()));
String gameState = client.getResponse(); String gameState = client.getResponse();
System.out.println(gameState);
if (gameState.length() == 9) { if (gameState.length() == 9) {
drawBoard(gameState); drawBoard(gameState);
if (!client.getGameEnded()){ if (!client.getGameEnded()) {
gameState = client.getResponse(); gameState = client.getResponse();
drawBoard(gameState); drawBoard(gameState);
} else { } else {
LinkedList<Integer> winCoordinates = new LinkedList<>(); LinkedList<Integer> winCoordinates = new LinkedList<>();
String response = client.getResponse(); 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); winCoordinates.add(Integer.valueOf(s) * 300);
} }
this.drawWinningLine(winCoordinates); this.drawWinningLine(winCoordinates);
@@ -106,24 +107,22 @@ public class TicTacToe_Client extends Application {
} }
} }
private void drawWinningLine(LinkedList<Integer>winCoordinates){ private void drawWinningLine(LinkedList<Integer> winCoordinates) {
Line winningLine = new Line(winCoordinates.get(0), winCoordinates.get(1), winCoordinates.get(2), winCoordinates.get(3)); Line winningLine = new Line(winCoordinates.get(0), winCoordinates.get(1), winCoordinates.get(2), winCoordinates.get(3));
winningLine.setFill(Color.RED); 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 @Override
public void start(Stage primaryStage) { public void start(Stage primaryStage) {
client = new Client("localhost", 2589, "TestClient"); client = new Client("server", 2589, "Cato");
client.handshake(); client.handshake();
primaryStage.setTitle("TicTacToe"); primaryStage.setTitle("TicTacToe");
primaryStage.setResizable(false); primaryStage.setResizable(false);
this.initializeGrid(); this.initializeGrid();
primaryStage.setScene(this.setScene()); primaryStage.setScene(this.setScene());
primaryStage.show(); primaryStage.show();
this.drawBoard(client.getGameState()); this.drawBoard(client.getGameState());
@@ -132,4 +131,5 @@ public class TicTacToe_Client extends Application {
public static void main(String[] args) { public static void main(String[] args) {
launch(args); launch(args);
} }
} }

View File

@@ -34,16 +34,16 @@ public class TicTacToe_Server {
board = this.convertToNumbers(gameState); board = this.convertToNumbers(gameState);
} }
public int makeClientMove(String input) { public boolean makeClientMove(String input) {
int column = Double.valueOf(input.split("\\|")[0]).intValue() / 300; int column = Double.valueOf(input.split("\\|")[0]).intValue() / 300;
int row = Double.valueOf(input.split("\\|")[1]).intValue() / 300; int row = Double.valueOf(input.split("\\|")[1]).intValue() / 300;
int index = column * 3 + row; int index = column * 3 + row;
if (isLegalMove(column, row)) { if (isLegalMove(column, row)) {
makeMoveOnBoard(index, 0); makeMoveOnBoard(index, 0);
return 200; return true;
} else { } else {
return 404; return false;
} }
} }

View File

@@ -81,22 +81,22 @@ public class MultiPlayerServer {
} }
public void ticTacToe_gameloop() { public void ticTacToe_gameloop() {
for (Socket client : clients.values()) { while(clients.size() == 2) {
try { for (Socket client : clients.values()) {
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();
try { try {
client.close(); String message = instreams.get(client).readUTF();
} catch (IOException ioException) { serverLogger.printLog(message, clientNames.get(client), LogType.Message);
ioException.printStackTrace(); 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).writeInt(200);
outstreams.get(client).flush(); outstreams.get(client).flush();
serverLogger.printLog("Sent verification code", clientNames.get(client), LogType.Log); serverLogger.printLog("Sent verification code", clientNames.get(client), LogType.Log);
int verificationCode = ticTacToe_server.makeClientMove(position); boolean isAllowed = ticTacToe_server.makeClientMove(position);
if (verificationCode == 200) { if (isAllowed) {
String gameState = ticTacToe_server.getGameState(); String gameState = ticTacToe_server.getGameState();
outstreams.get(client).writeUTF(gameState); outstreams.get(client).writeUTF(gameState);
outstreams.get(client).flush(); outstreams.get(client).flush();

View File

@@ -121,8 +121,8 @@ public class SinglePlayerServer {
outstreams.get(client).writeInt(200); outstreams.get(client).writeInt(200);
outstreams.get(client).flush(); outstreams.get(client).flush();
serverLogger.printLog("Sent verification code", clientNames.get(client), LogType.Log); serverLogger.printLog("Sent verification code", clientNames.get(client), LogType.Log);
int verificationCode = ticTacToe_server.makeClientMove(position); boolean moveAllowed = ticTacToe_server.makeClientMove(position);
if (verificationCode == 200) { if (moveAllowed) {
String gameState = ticTacToe_server.getGameState(); String gameState = ticTacToe_server.getGameState();
outstreams.get(client).writeUTF(gameState); outstreams.get(client).writeUTF(gameState);
outstreams.get(client).flush(); outstreams.get(client).flush();

View File

@@ -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

View File

@@ -0,0 +1,2 @@
#!/bin/bash
ssh root@server ./startMultiServer.sh

View File

@@ -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

View File

@@ -0,0 +1,2 @@
#!/bin/bash
ssh root@server ./startSingleServer.sh

View File

@@ -1,3 +1,6 @@
Manifest-Version: 1.0 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

View File

@@ -1,3 +1,2 @@
Manifest-Version: 1.0 Manifest-Version: 1.0
Main-Class: networking.SinglePlayerServer Main-Class: networking.SinglePlayerServer

View File

@@ -0,0 +1,2 @@
Manifest-Version: 1.0
Main-Class: networking.MultiPlayerServer

View File

@@ -1,3 +1,2 @@
Manifest-Version: 1.0 Manifest-Version: 1.0
Main-Class: networking.SinglePlayerServer Main-Class: networking.SinglePlayerServer