@Override
 public final void stop() {
   theClojureGamer.setMatch(getMatch());
   theClojureGamer.setRoleName(getRoleName());
   try {
     theClojureGamer.stop();
   } catch (RuntimeException e) {
     GamerLogger.logError("GamePlayer", "Caught exception in Clojure stateMachineStop:");
     GamerLogger.logStackTrace("GamePlayer", e);
   }
 }
 @Override
 public final void metaGame(long timeout) throws MetaGamingException {
   theClojureGamer.setMatch(getMatch());
   theClojureGamer.setRoleName(getRoleName());
   try {
     theClojureGamer.metaGame(timeout);
   } catch (RuntimeException e) {
     GamerLogger.logError("GamePlayer", "Caught exception in Clojure stateMachineMetaGame:");
     GamerLogger.logStackTrace("GamePlayer", e);
   }
 }
 @Override
 public final GdlSentence selectMove(long timeout) throws MoveSelectionException {
   theClojureGamer.setMatch(getMatch());
   theClojureGamer.setRoleName(getRoleName());
   try {
     return theClojureGamer.selectMove(timeout);
   } catch (RuntimeException e) {
     GamerLogger.logError("GamePlayer", "Caught exception in Clojure stateMachineSelectMove:");
     GamerLogger.logStackTrace("GamePlayer", e);
     return null;
   }
 }
 @Override
 public final String getName() {
   try {
     return theClojureGamer.getName();
   } catch (RuntimeException e) {
     GamerLogger.logError("GamePlayer", "Caught exception in Clojure getName:");
     GamerLogger.logStackTrace("GamePlayer", e);
     return this.getClass().getSimpleName();
   }
 }
  // TODO: This code should be put somewhere more general.
  public static void main(String args[]) {
    try {
      Gamer g = new ClojureLegalGamerStub();
      System.out.println(g.getName());

      Match m = new Match("", 1000, 1000, GameRepository.getDefaultRepository().getGame("conn4"));
      g.setMatch(m);
      g.setRoleName(GdlPool.getProposition(GdlPool.getConstant("xplayer")));
      g.metaGame(1000);
      System.out.println(g.selectMove(1000));
    } catch (Exception e) {
      e.printStackTrace();
    }
  }