 
import net.jini.discovery.*;
import net.jini.core.lookup.*;
import java.util.Hashtable;
import java.io.IOException;
import java.rmi.RMISecurityManager;
import com.sun.jini.lease.*;
import net.jini.core.lease.Lease;
 
public class Server implements 
       DiscoveryListener, LeaseListener {
    protected Service service;    
    protected LeaseRenewalManager leaseManager =
	                new LeaseRenewalManager(); 
	protected ServiceID serviceID = null;
	
	public static void main(String args[]) {
	    new Server();
	     
    }
    
	public Server() {
	     try {
		   service = new Service();
		 }
		 catch(Exception e) {
		   System.err.println(""+e);
		   System.exit(1);
		 }
		 System.setSecurityManager(
		      new RMISecurityManager());
         LookupDiscovery discover = null;
		 try {
		   discover = new LookupDiscovery(
		      LookupDiscovery.ALL_GROUPS);
	     }
		 catch(Exception e) {
		    System.err.println(""+e);
			System.exit(1);
		}
		discover.addDiscoveryListener(this);
	}
		      
	public void discovered(DiscoveryEvent evt) {
        ServiceRegistrar[] registrars = evt.getRegistrars();
		 
        for (int n=0 ; n<registrars.length ; n++) {
          ServiceRegistrar registrar = registrars[n];
		  ServiceItem item = new ServiceItem(
		      null, service, null);
    //debug
                  System.out.println("registered " + service.getClass().getName());
    //enddebug
		  ServiceRegistration reg = null;
		  try {
		    reg = registrar.register(item,Lease.FOREVER);
            }
		  catch(java.rmi.RemoteException e) {
		     System.err.println("" + e);
			 continue;
             }
		  leaseManager.renewUntil(reg.getLease(),
		          Lease.FOREVER,this);
		 }
	}
	public void discarded(DiscoveryEvent evt) {}
		     
    public void notify(LeaseRenewalEvent evt) {
	   System.out.println("LeaseExpired " + evt); }
}

