Fixed disconnection issues. Fix is only temporary until a consistent interface for disconnections exists.

#bug #implement
This commit is contained in:
Calum
2017-08-17 14:02:18 +12:00
parent ef2659a7b9
commit 0276911b88
8 changed files with 92 additions and 43 deletions
@@ -142,18 +142,20 @@ public class ClientToServerThread implements Runnable {
}
} catch (ByteReadException e) {
logger.warn("Byte read exception on ClientToServerThread", 1);
closeSocket();
notifyDisconnectListeners("Connection to server was interrupted");
closeSocket();
}
}
logger.warn("Closed connection to server", 1);
closeSocket();
notifyDisconnectListeners("Connection to server was terminated");
closeSocket();
}
private void notifyDisconnectListeners (String message) {
for (DisconnectedFromHostListener listener : disconnectionListeners) {
listener.notifYDisconnection(message);
if (socketOpen) {
for (DisconnectedFromHostListener listener : disconnectionListeners) {
listener.notifYDisconnection(message);
}
}
}
@@ -167,8 +169,8 @@ public class ClientToServerThread implements Runnable {
os.write(requestMessage.getBuffer());
} catch (IOException e) {
logger.error("Could not send registration request. Exiting");
closeSocket();
notifyDisconnectListeners("Failed to register with server");
closeSocket();
}
}
@@ -197,8 +199,8 @@ public class ClientToServerThread implements Runnable {
else{
alertErrorText = "Could not connect to server";
}
closeSocket();
notifyDisconnectListeners(alertErrorText);
closeSocket();
}
/**
@@ -208,7 +210,7 @@ public class ClientToServerThread implements Runnable {
* - MAINTAIN_HEADING = DOWNWIND and UPWIND packets stop being sent.
* @param actionType The boat action that will dictate packets sent.
*/
public void sendBoatActionMessage(BoatAction actionType) {
public void sendBoatAction(BoatAction actionType) {
switch (actionType) {
case MAINTAIN_HEADING:
if (upwindTimerFlag) {
@@ -272,9 +274,9 @@ public class ClientToServerThread implements Runnable {
try {
os.write(message.getBuffer());
} catch (IOException e) {
logger.warn("IOException on attempting to sendBoatActionMessage from Client");
closeSocket();
logger.warn("IOException on attempting to sendBoatAction from Client");
notifyDisconnectListeners("Cannot communicate with server");
closeSocket();
}
}
}
@@ -282,6 +284,7 @@ public class ClientToServerThread implements Runnable {
private void closeSocket() {
try {
socket.close();
socketOpen = false;
} catch (IOException e) {
logger.warn("IOException on attempting to close ClientToServerSocket");
}
@@ -318,8 +321,8 @@ public class ClientToServerThread implements Runnable {
crcBuffer.write(currentByte);
} catch (IOException e) {
logger.warn("IOException on readByte Client side", 1);
closeSocket();
notifyDisconnectListeners("Cannot read from server.");
closeSocket();
}
if (currentByte == -1) {
throw new ByteReadException("InputStream reach end of stream");
@@ -104,6 +104,7 @@ public class GameClient {
* @param portNumber Port to connect to.
*/
public void runAsHost(String ipAddress, Integer portNumber) {
server = new MainServerThread();
try {
startClientToServerThread(ipAddress, portNumber);
socketThread.addDisconnectionListener((cause) -> {
@@ -126,6 +127,8 @@ public class GameClient {
lobbyController.disableReadyButton();
server.startGame();
} else if (exitCause == CloseStatus.LEAVE) {
server.terminate();
server = null;
loadStartScreen();
}
});
@@ -370,13 +373,13 @@ public class GameClient {
private void keyPressed(KeyEvent e) {
switch (e.getCode()) {
case SPACE: // align with vmg
socketThread.sendBoatActionMessage(BoatAction.VMG); break;
socketThread.sendBoatAction(BoatAction.VMG); break;
case PAGE_UP: // upwind
socketThread.sendBoatActionMessage(BoatAction.UPWIND); break;
socketThread.sendBoatAction(BoatAction.UPWIND); break;
case PAGE_DOWN: // downwind
socketThread.sendBoatActionMessage(BoatAction.DOWNWIND); break;
socketThread.sendBoatAction(BoatAction.DOWNWIND); break;
case ENTER: // tack/gybe
socketThread.sendBoatActionMessage(BoatAction.TACK_GYBE); break;
socketThread.sendBoatAction(BoatAction.TACK_GYBE); break;
}
}
@@ -385,12 +388,12 @@ public class GameClient {
switch (e.getCode()) {
//TODO 12/07/17 Determine the sail state and send the appropriate packet (eg. if sails are in, send a sail out packet)
case SHIFT: // sails in/sails out
socketThread.sendBoatActionMessage(BoatAction.SAILS_IN);
socketThread.sendBoatAction(BoatAction.SAILS_IN);
allBoatsMap.get(socketThread.getClientId()).toggleSail();
break;
case PAGE_UP:
case PAGE_DOWN:
socketThread.sendBoatActionMessage(BoatAction.MAINTAIN_HEADING); break;
socketThread.sendBoatAction(BoatAction.MAINTAIN_HEADING); break;
}
}