// CountImpl.java, Count implementation

import java.util.*;
import java.rmi.*;
import java.rmi.server.UnicastRemoteObject;

public class CountImpl extends UnicastRemoteObject
  implements Count {
  private int sum;
  // Lista de clientes registrados
  private Vector clientes = new Vector();
  
  public CountImpl() throws RemoteException  {
  }
  
  public  void set(int val) throws RemoteException {
    sum = val;
  }
  
  public  void reset() throws RemoteException {
    sum = 0;
  }
  
  public int get() throws RemoteException {
    return sum;
  }
  
  public int increment() throws RemoteException {
    sum++;
    if (sum%100 == 0)
      notify();
    return sum;
  }

  public void addClient(CountClientInterface client) throws RemoteException {
    clientes.add(client);
  }

  public void remClient(CountClientInterface client) throws RemoteException {
    clientes.remove(client);
  }

  private void notify() throws RemoteException {
    CountClientInterface cci;
    for (int i=0; i<clientes.size(); ++i) {
      cci = (CountClientInterface) clientes.elementAt(i);
      cci.update(sum);
    }
  }
}