// CountClientR.java  RMI operacao remota
import java.rmi.*;
import java.rmi.registry.*;

public class CountClientR {
    Count myCount;

    // Localizar o servico
    void getRemoteReference(String namingLocation, String serviceName) 
	throws  NotBoundException,
	java.net.MalformedURLException,
	RemoteException {
	myCount = (Count) Naming.lookup("rmi://" + 
					namingLocation + "/" + 
					serviceName);
    }

    // Medir tempo para incrementar N vezes o contador remoto
    long incrementN(int n) throws RemoteException {
	long startTime = System.currentTimeMillis();
	for (int i = 0 ; i < n ; i++ ) 
	    myCount.increment();
	long stopTime = System.currentTimeMillis();
	return stopTime - startTime;
    }

    public static void main(String args[]) { 
	final int qtde = 1000;

	// Criar e instalar localmente o gerenciador de seguranca RMI
	System.setSecurityManager(new RMISecurityManager());
	CountClientR cliente = new CountClientR();

	try { 
	    // Localizar e usar o servico
	    cliente.getRemoteReference(args[0],args[1]);
	    long tempo = cliente.incrementN(qtde);
      	    System.out.println("Tempo total para " + qtde + " incrementos:"
			       + tempo + " msecs");
	}
	catch (ArrayIndexOutOfBoundsException ai) {
	    System.err.println("Uso: java CountClientR <locreg> <servname>");
	    System.err.println("\t <locreg> - host[:port] para registro RMI");
	    System.err.println("\t <servname> - nome do servico no registro");
	}
	catch (Exception e) { 
	    e.printStackTrace();
	}
	System.exit(0);
    }
}