Added support for easy deployment to offsite server
This commit is contained in:
2
.idea/artifacts/Client_jar.xml
generated
2
.idea/artifacts/Client_jar.xml
generated
@@ -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>
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
7
deployment/multiplayer/buildMultiServer.sh
Executable file
7
deployment/multiplayer/buildMultiServer.sh
Executable 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
|
||||||
2
deployment/multiplayer/startMultiServer.sh
Executable file
2
deployment/multiplayer/startMultiServer.sh
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
ssh root@server ./startMultiServer.sh
|
||||||
7
deployment/singleplayer/buildSingleServer.sh
Executable file
7
deployment/singleplayer/buildSingleServer.sh
Executable 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
|
||||||
2
deployment/singleplayer/startSingleServer.sh
Executable file
2
deployment/singleplayer/startSingleServer.sh
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
ssh root@server ./startSingleServer.sh
|
||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,2 @@
|
|||||||
Manifest-Version: 1.0
|
Manifest-Version: 1.0
|
||||||
Main-Class: networking.SinglePlayerServer
|
Main-Class: networking.SinglePlayerServer
|
||||||
|
|
||||||
|
|||||||
2
out/production/Server/META-INF/multiServerManifest.MF
Normal file
2
out/production/Server/META-INF/multiServerManifest.MF
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
Manifest-Version: 1.0
|
||||||
|
Main-Class: networking.MultiPlayerServer
|
||||||
@@ -1,3 +1,2 @@
|
|||||||
Manifest-Version: 1.0
|
Manifest-Version: 1.0
|
||||||
Main-Class: networking.SinglePlayerServer
|
Main-Class: networking.SinglePlayerServer
|
||||||
|
|
||||||
Reference in New Issue
Block a user