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