/** * enthaelt den ausfuehrbaren Code des Threads; hier wird auf Nachrichten gewartet, die dann ueber * das Server-Objekt weitergeleitet werden koennen (siehe Methode forward() des Servers). Die * Zieladresse der Nachricht wird ueberprueft, um dann die Nachricht an die entsprechende * Server-Methode weiterzugeben. Im Fehlerfall wird hier die Verbindung getrennt und die Methode * shutdown() auf dem Server aufgerufen, um das Spiel zu entfernen. * * @exception IOException * @exception InterruptedIOException */ public void run() { while (!isInterrupted()) { // hier wird die Zieladresse (target) aus der Nachricht extrahiert try { String message = receive(); // System.out.println("ServerThread "+myNumber+":"+" "+message); if (message != null) { StringTokenizer ST = new StringTokenizer(message); int target = Integer.parseInt(ST.nextToken()); System.out.println("sending message from " + myNumber + " to " + target); // falls target="-1": Nachricht an Server; sonst Nachricht // an Spieler x if (target >= -1) { server.forward(gameID, message); } else { send("1exit"); server.deletePlayer(message + " " + gameID); interrupt(); try { connection.close(); } catch (IOException ex) { } } } else { String log = "Aborting game! Player " + (myNumber + 1) + " has left the game\n"; System.out.print(log); server.log(log, server.getPort()); interrupt(); server.shutdown(nameOfTheGame + " " + myNumber + " " + gameID, log); } } catch (InterruptedIOException e) { String log = "Aborting game! TimeOut while receiving message" + " from player " + (myNumber + 1) + "\n"; System.out.print(log); server.log(log, server.getPort()); interrupt(); server.shutdown(nameOfTheGame + " " + myNumber + " " + gameID, log); } catch (IOException e) { String log = "Aborting game! Player " + (myNumber + 1) + " has left the game\n"; System.out.print(log); server.log(log, server.getPort()); interrupt(); server.shutdown(nameOfTheGame + " " + myNumber + " " + gameID, log); } } }
/** * trennt die Socketverbindung zum entsprechenden Client * * @exception IOException */ public void closeConnection() { try { connection.close(); } catch (IOException e) { String log = "player " + (myNumber + 1) + ": error closing connection\n"; System.out.print(log); server.log(log, server.getPort()); } }