/**
  * Metodo che viene eseguito non appena viene rilevato un cambiamento nello stato del subject
  * osservato.
  */
 @Override
 public void update() {
   switch (p.getEvent()) {
     case FOE_MOVED:
       receiveMove();
       break;
     case MATCH_STARTED:
       setGame(p.getGame());
       break;
   }
   state = p.getEvent();
   sendNotification();
 }
 /** Consente di ricevere la mossa effettuata dall'avversario nella partita corrente. */
 public void receiveMove() {
   int m = p.getFoeSelectedMove();
   grid[m / Game.GRID_DIMENSION][m % Game.GRID_DIMENSION] = Game.P2_CELL;
 }
 /**
  * Consente a un player di registrarsi presso il server. Il nickname deve essere univoco nel
  * sistema fino alla deregistrazione del player.
  *
  * @param nickname nome con cui registrarsi.
  * @return true se la registrazione e' andata a buon fine, false altrimenti
  * @throws RemoteException
  */
 public boolean registerPlayer(String nickname) throws RemoteException {
   p = new PlayerImpl();
   p.setName(nickname);
   p.add(this); // mi aggiungo come osservatore di p
   return server.register(p, nickname);
 }