// CountManager implementation

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

public class CManagerImpl extends UnicastRemoteObject 
  implements CountManager {

  private Hashtable counters = new Hashtable();

  public CManagerImpl() throws RemoteException {
  }

  public Count getCount(String nome) throws RemoteException {
    Count rem = null;

    if (counters.containsKey(nome))
      rem = (Count) counters.get(nome);
    else {
      rem = new CountImpl();
      counters.put(nome,rem);
      System.out.println("New counter: " + nome);
    }

    return rem;
  }

  public static void main(String[] args) {
    try {
      String serviceName = "CountFactory";
      CManagerImpl myCM = new CManagerImpl();
      Registry r = LocateRegistry.getRegistry();
      r.bind(serviceName, myCM);
      System.out.println("CountFactory ready.");
    } 
    catch (Exception e) {
      e.printStackTrace();
    }
  }
}