Implemented threading in Client

- GUI doesn't get blocked anymore
- Implemented client side protocol based control
- Client is now ready for player versus player
This commit is contained in:
2021-03-18 03:47:40 +01:00
parent 8299f680b0
commit f1fc88511b
15 changed files with 494 additions and 238 deletions

View File

@@ -10,6 +10,7 @@ import java.net.Socket;
import java.util.Scanner;
public class Client {
private Socket serverSocket;
private DataOutputStream out;
private DataInputStream in;
private static Scanner scanner;
@@ -21,7 +22,8 @@ public class Client {
public Client(String ip, int port, String name) {
try {
scanner = new Scanner(System.in);
Socket serverSocket = new Socket(ip, port);
serverSocket = new Socket(ip, port);
serverName = serverSocket.getRemoteSocketAddress().toString();
out = new DataOutputStream(serverSocket.getOutputStream());
in = new DataInputStream(serverSocket.getInputStream());
clientLogger = new ClientLogger();
@@ -41,7 +43,6 @@ public class Client {
if (success) {
out.writeUTF(name);
out.flush();
serverName = in.readUTF();
clientLogger.printLog("You successfully connected to me", serverName, success, LogType.Log);
} else {
clientLogger.printLog("Connection failed try again", success, LogType.Log);
@@ -63,10 +64,20 @@ public class Client {
}
}
public void sendConfirmation(){
try {
out.writeInt(200);
out.flush();
clientLogger.printLog("Sent verification code", serverName, true, LogType.Log);
} catch (IOException e) {
e.printStackTrace();
}
}
public String getResponse() {
try {
String message = in.readUTF();
clientLogger.printLog(String.format("Message recieved: %s", message), serverName, success, LogType.Log);
clientLogger.printLog(String.format("Message recieved: %s", message), serverName, true, LogType.Log);
return message;
} catch (IOException e) {
e.printStackTrace();
@@ -74,17 +85,29 @@ public class Client {
return "";
}
public boolean getBooleanResponse(String value){
public boolean getBooleanResponse(String message) {
try {
boolean booleanResponse = in.readBoolean();
clientLogger.printLog(String.format(value + ": %b", booleanResponse), serverName, booleanResponse, LogType.Log);
return booleanResponse;
boolean state = in.readBoolean();
clientLogger.printLog(String.format("%s: %b", message, state), serverName, true, LogType.Log);
return state;
} catch (IOException e) {
e.printStackTrace();
}
return false;
}
public boolean isPlayerOne(){
this.sendToServer("isClientOne");
boolean isClientOne = this.getBooleanResponse("isClientOne");
return isClientOne;
}
public boolean getServerType(){
this.sendToServer("serverType");
boolean serverType = this.getBooleanResponse("isSingleServer");
return serverType;
}
public String getGameState() {
this.sendToServer("gameState");
String gameState = this.getResponse();
@@ -93,10 +116,20 @@ public class Client {
public boolean getGameEnded() {
this.sendToServer("gameEnded");
boolean gameEnded = this.getBooleanResponse("Game ended");
boolean gameEnded = false;
try {
gameEnded = in.readBoolean();
clientLogger.printLog(String.format("Game ended: %b", gameEnded), serverName, gameEnded, LogType.Log);
} catch (IOException e) {
e.printStackTrace();
}
return gameEnded;
}
public void waitForInput() {
}
public void exitProcess(){
try {
out.writeUTF("exit()");
@@ -108,12 +141,13 @@ public class Client {
}
}
public boolean hasSucceeded() {
return success;
}
public String getName() {
return name;
}
public boolean isConnected(){
return serverSocket.isConnected();
}
}