package Nameserver;

import java.io.*;
import java.util.*;
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;


public class Main{
  static private Registry $reg = null;
  static private MyDNS $myObject = null;
  static private MyDNS $root = null;
  static private Properties $prop = new Properties();


static public void main(String[] $args)throws Exception{
  if($args.length > 1){
    System.out.println("usage: java Nameserver.Main [<my zone>]");
    System.exit(1);
  }

  System.out.println("Nameserver starting...");
  InputStream $in = ClassLoader.getSystemResourceAsStream("registry.properties");
  if ($in == null){
    System.err.println("ERROR: Properties file not found!");
    System.exit(1);
  }
  $prop.load($in);
  $in.close();
  try{
    //if no arguments given -> start registry - me is root!
    if($args.length == 0){
      System.out.println("ICH bin root, ich darf das!");
      $reg = LocateRegistry.createRegistry(Integer.parseInt($prop.getProperty("registry.port")));
      $myObject = new MyDNSImpl();
      UnicastRemoteObject.exportObject($myObject, 0);
      $reg.bind("rmi://"+$prop.getProperty("registry.host")+":"+$prop.getProperty("registry.port")+"/"+$prop.getProperty("ro_id"), $myObject);
      System.out.println($reg);
      System.out.println(Arrays.toString($reg.list()));
      System.out.println("MyDNS-ROOT-Object created and registered.");
    }else{
      $reg = LocateRegistry.getRegistry($prop.getProperty("registry.host"), Integer.parseInt($prop.getProperty("registry.port")));
      $root = (MyDNS) $reg.lookup("rmi://"+$prop.getProperty("registry.host")+":"+$prop.getProperty("registry.port")+"/"+$prop.getProperty("ro_id"));
      $myObject = new MyDNSImpl($args[0]);
      UnicastRemoteObject.exportObject($myObject, 0);
      $root.regServiceRecord($myObject);
      System.out.println("MyDNS-Object created and registered.");
    }

    System.out.println("Nameserver idle... Hit ENTER for shutdown.");
    while(true){
      Helper.readByte(System.in);
      break;
    }
  }catch(Exception $e){
    System.err.println($e.getMessage());
  }try{
    System.out.println("Nameserver shutting down...");
    if($root != null)$root.unregServiceRecord($myObject);
    UnicastRemoteObject.unexportObject($myObject, true);
  }catch(Exception $e){
    System.err.println($e.getMessage());
    System.exit(1);
  }

}

}