package javacodebook.net.rmi.simpleclient;

import java.rmi.*;
import java.rmi.registry.*;

// Das Addressbook interface muss auch auf Client-Seite bekannt sein.
// Bemerkung: Für den Ort dieser Interfaces bietet sich oft ein öffentliches 
// Repository im Netz an, damit der Pfad unabhängig vom Serverpfad ist.
import javacodebook.net.rmi.simpleserver.AddressBook;

/**
 * @author benjamin_rusch
 *
 * Dieser Client sucht ein entferntes Objekt im Netz, und ruft zwei seiner
 * Methoden auf. 
 * Es können der Application beim Start zwei Strings übergeben werden, der 
 * erste gibt den "Host" der zweite den "Port" des Namensdienstes an.
 */
public class AddressBookClient {

	public static String host = "localhost";
	public static int port = 1099;
	
	public static void main(String[] args) throws Exception {
		
		// Werden zwei Strings beim Program-Start übergeben, wird der erste
		// als URL und der zweite als Port des Namensdienstes interpretiert.  
		// Sonst werden Default-Einstellungen verwendet.
		if(args.length==2) {
			host=args[0];
			port=Integer.parseInt(args[1]);
		}
		
		// Anhand der Namensdienst URL und des Ports wird der Lookup-String
		// zusammengebaut. 
		String mLookup = "//"+host+":"+port+"/"+AddressBook.NAMING;
   		
   		// Remote-Objekt wird referenziert, und zum AddressBook Object 
   		// gecastet
   		AddressBook book = (AddressBook)Naming.lookup(mLookup);
		
		// Methoden des Remote-Objekts werden aufgerufen
		System.out.println("Das Adressbuch hat "+book.getSize()+" Einträge.");
		System.out.println("Arbeit hat folgende Adresse: "
				+book.getAddressByName("Arbeit"));
	}
}
