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">
<element id="archive" name="Client.jar">
<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 id="module-output" name="Client" />
</element>

View File

@@ -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<Integer> 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(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));
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);
}
}

View File

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

View File

@@ -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();

View File

@@ -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();

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
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
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
Main-Class: networking.SinglePlayerServer