/**
   * 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());
   }
 }