package fr.cnam.clientihm;

import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;

import fr.cnam.espacetore.*;

// Cet observer s'abonne a l'espace de tore distant. Il sera notifie quand
//  les agents se deplacent.
//  Il est un objet distribue qui envoie son stub a l'espace de tore afin d'etre notifie.
//
public class ObserverEspaceToreRMI extends UnicastRemoteObject implements ObserverRMIInt
{
    Observer observer; // L'objet cible de notification

    // Constructeur
    public ObserverEspaceToreRMI(int portRMI,Observer observer,EspaceToreODInt espace ) throws RemoteException
    {
        super(portRMI);
        try{
            this.observer = observer;

            // Recuperation du stub de l'objet distribue
            Remote stub = UnicastRemoteObject.toStub(this);

            // On s'abonne aux changement des données 
            // Ici en RMI donc donner son stub en parametre
            //
            espace.addObserver(stub);  

        }catch(Exception ex){ex.printStackTrace();System.out.println("ObserverEspaceToreRMI: erreur dans le constructeur \n"+ex);};
    }

    // Methode qui est appelée si une donnée change dans l'espace de tore
    //
    public void update(Observable observable, Object arg) throws RemoteException
    {
        // On relait la notification à l'objet cible
        observer.update(observable,arg);
    }
}

    