public void go() throws Exception {
    String input, action;
    String[] tokens;

    while (true) {
      System.out.print("TTT > ");
      input = ParserUtils.getKeyInput();
      tokens = ParserUtils.getTokens(input);
      if (tokens.length == 0) {
        continue;
      }
      action = tokens[0];

      if (action.equalsIgnoreCase("exit")) System.exit(1);
      else if (action.equalsIgnoreCase("move")) {
        byte row, col;
        try {
          col = Byte.parseByte(tokens[1]);
          row = Byte.parseByte(tokens[2]);
        } catch (Exception e) {
          System.out.println(e.getMessage());
          System.out.println("usage: move row col");
          continue;
        }
        boolean verify = game.placeMark(col, row, playerID);
        System.out.println(verify);
        if (!verify) {
          System.out.println("error moving, try again");
        } else {
          System.out.println();
          System.out.println(game.showBoard());
          winner = game.checkWinner();
          if (winner) {
            System.out.println("WINNING MOVE: game over");
            System.out.println(game.showBoard());
            game.reset();
          }
        }

      } else if (action.equalsIgnoreCase("show")) {
        System.out.println(game.showBoard());
      } else if (action.equalsIgnoreCase("restart")) {
        game.reset();
      } else {
        System.out.println("invalid command");
        continue;
      }
    }
  }
 // this method is remote and called by server
 public void otherPlayerMoved(int move) throws RemoteException {
   System.out.println(game.showBoard());
 }