Fixed: TCP error sending, Server Crashed on GUIClient
This commit is contained in:
@@ -78,20 +78,16 @@ public class TCPClient implements IClient {
|
||||
socketReceive = new ObjectInputStream(communicationSocket.getInputStream());
|
||||
NetworkEvent event= new AddPlayer(user, proposedNPlayers);
|
||||
socketSend.writeObject(event);
|
||||
int read= communicationSocket.getInputStream().read();
|
||||
if ( read== -1) {
|
||||
System.out.println("Could not connect to server");
|
||||
|
||||
try {
|
||||
if( socketReceive.readObject() instanceof AddPlayer x)
|
||||
{
|
||||
try {
|
||||
if( socketReceive.readObject() instanceof AddPlayer x)
|
||||
{
|
||||
if(x.getIsError())
|
||||
return x.getErrorType();
|
||||
}
|
||||
} catch (ClassNotFoundException e) {
|
||||
return ErrorType.GENERIC_ERROR;
|
||||
}
|
||||
} catch (ClassNotFoundException e) {
|
||||
return ErrorType.GENERIC_ERROR;
|
||||
}
|
||||
|
||||
new Thread(this::receiveMessage, "tcp-reader").start();
|
||||
|
||||
// Socket heartbeat
|
||||
|
||||
@@ -86,11 +86,9 @@ public class ClientHandler implements Runnable {
|
||||
try {
|
||||
running = true;
|
||||
while (running) {
|
||||
synchronized (out){
|
||||
NetworkEvent event = (NetworkEvent) in.readObject();
|
||||
if (!actionQueue.add(event)) {
|
||||
System.out.println("Error inserting action into queue");
|
||||
}
|
||||
NetworkEvent event = (NetworkEvent) in.readObject();
|
||||
if (!actionQueue.add(event)) {
|
||||
System.out.println("Error inserting action into queue");
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
|
||||
@@ -137,15 +137,13 @@ public class TCPServer {
|
||||
try {
|
||||
Socket clientSocket = socketTCP.accept();
|
||||
|
||||
ObjectOutputStream clientSend =
|
||||
new ObjectOutputStream(clientSocket.getOutputStream());
|
||||
ObjectInputStream clientReceive =
|
||||
new ObjectInputStream(clientSocket.getInputStream());
|
||||
ObjectOutputStream clientSend = new ObjectOutputStream(clientSocket.getOutputStream());
|
||||
clientSend.flush();
|
||||
ObjectInputStream clientReceive = new ObjectInputStream(clientSocket.getInputStream());
|
||||
|
||||
NetworkEvent event = (NetworkEvent) clientReceive.readObject();
|
||||
|
||||
if (!(event.getEventType() == EventType.ADD_PLAYER)) {
|
||||
clientSocket.getOutputStream().write(-1);
|
||||
clientSocket.close();
|
||||
System.out.println("Invalid parameters. Connection terminated.");
|
||||
continue;
|
||||
@@ -155,7 +153,9 @@ public class TCPServer {
|
||||
|
||||
if (eventAddPlayer.getProposedNPlayer() < 2
|
||||
|| eventAddPlayer.getProposedNPlayer() > 5) {
|
||||
clientSocket.getOutputStream().write(-1);
|
||||
eventAddPlayer.setErrorType(ErrorType.WRONG_PLAYER_NUMBER);
|
||||
eventAddPlayer.setIsError(true);
|
||||
clientSend.writeObject(eventAddPlayer);
|
||||
clientSocket.close();
|
||||
System.out.println("Invalid parameters. Connection terminated.");
|
||||
continue;
|
||||
@@ -172,18 +172,18 @@ public class TCPServer {
|
||||
}
|
||||
if(controller.getModel().getCurrentState().getGameStage()!= GameStages.WAITING ) {
|
||||
if (!controller.getModel().getPlayers().stream().anyMatch(p -> p.getUserName().equals(username))) {
|
||||
clientSocket.getOutputStream().write(-1);
|
||||
eventAddPlayer.setErrorType(ErrorType.GAME_ALREADY_STARTED);
|
||||
eventAddPlayer.setIsError(true);
|
||||
clientSend.writeObject(eventAddPlayer);
|
||||
clientSocket.close();
|
||||
System.out.println("Invalid parameters. Connection terminated.");
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else{
|
||||
if (controller.addPlayer(username)) {
|
||||
playerList.put(username, true);
|
||||
System.out.println("Accepted player: " + username);
|
||||
|
||||
ClientHandler handler = new ClientHandler(
|
||||
username,
|
||||
clientSocket,
|
||||
@@ -194,7 +194,7 @@ public class TCPServer {
|
||||
actionQueue
|
||||
);
|
||||
|
||||
clientSocket.getOutputStream().write(1);
|
||||
clientSend.writeObject(eventAddPlayer);
|
||||
pendingHeartbeat.put(username, handler);
|
||||
|
||||
Thread thread = new Thread(handler);
|
||||
@@ -206,11 +206,13 @@ public class TCPServer {
|
||||
|
||||
}
|
||||
else {
|
||||
clientSocket.getOutputStream().write(-1);
|
||||
|
||||
eventAddPlayer.setErrorType(ErrorType.USERNAME_ALREADY_USED);
|
||||
eventAddPlayer.setIsError(true);
|
||||
clientSend.writeObject(eventAddPlayer);
|
||||
clientSocket.close();
|
||||
System.out.println("Invalid parameters. Connection terminated.");
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -218,7 +220,6 @@ public class TCPServer {
|
||||
if (!playerList.containsKey(username)) {
|
||||
playerList.put(username, true);
|
||||
System.out.println("(After crash)Reconnected player: " + username);
|
||||
|
||||
ClientHandler handler = new ClientHandler(
|
||||
username,
|
||||
clientSocket,
|
||||
@@ -229,7 +230,7 @@ public class TCPServer {
|
||||
actionQueue
|
||||
);
|
||||
|
||||
clientSocket.getOutputStream().write(1);
|
||||
clientSend.writeObject(eventAddPlayer);
|
||||
pendingHeartbeat.put(username, handler);
|
||||
|
||||
Thread thread = new Thread(handler);
|
||||
@@ -237,8 +238,6 @@ public class TCPServer {
|
||||
|
||||
clientHandlers.add(handler);
|
||||
connectedPlayers++;
|
||||
continue;
|
||||
|
||||
}
|
||||
//reconnect a previously disconnected player
|
||||
else{
|
||||
@@ -246,7 +245,6 @@ public class TCPServer {
|
||||
|
||||
playerList.put(username, true);
|
||||
System.out.println("Reconnected player: " + username);
|
||||
|
||||
ClientHandler handler = new ClientHandler(
|
||||
username,
|
||||
clientSocket,
|
||||
@@ -257,7 +255,7 @@ public class TCPServer {
|
||||
actionQueue
|
||||
);
|
||||
|
||||
clientSocket.getOutputStream().write(1);
|
||||
clientSend.writeObject(eventAddPlayer);
|
||||
pendingHeartbeat.put(username, handler);
|
||||
|
||||
Game game = controller.getModel();
|
||||
@@ -278,8 +276,9 @@ public class TCPServer {
|
||||
actionQueue.add(new ReconnectPlayer(username));
|
||||
|
||||
} else {
|
||||
clientSocket.getOutputStream().write(-1);
|
||||
|
||||
eventAddPlayer.setErrorType(ErrorType.USER_ALREADY_CONNECTED);
|
||||
eventAddPlayer.setIsError(true);
|
||||
clientSend.writeObject(eventAddPlayer);
|
||||
clientSocket.close();
|
||||
System.out.println("Invalid parameters. Connection terminated.");
|
||||
|
||||
@@ -137,9 +137,14 @@ public class GUI extends Application implements IView {
|
||||
@Override
|
||||
public void showError(ErrorType error,String message) {
|
||||
Platform.runLater(() -> {
|
||||
synchronized (miniModel) {
|
||||
controllerMain.isError = true;
|
||||
controllerMain.render();
|
||||
if(error==ErrorType.SERVER_CRASHED){
|
||||
primaryStage.setScene(loginScene);
|
||||
controllerLogin.showError(error);
|
||||
}else {
|
||||
synchronized (miniModel) {
|
||||
controllerMain.isError = true;
|
||||
controllerMain.render();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -172,7 +172,7 @@ public class LoginFXMLController {
|
||||
}
|
||||
}
|
||||
}
|
||||
private void showError(ErrorType errorType) {
|
||||
public void showError(ErrorType errorType) {
|
||||
labelErrore.setTextFill(Color.web("#e05050"));
|
||||
labelErrore.setText(errorType.toString());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user