// (c) 1999 Michael Dom und Wolfgang Westje
// 
// Alle Rechte vorbehalten.

// Wird der JAVAMeister benutzt, muss man vorher
//               setenv THREADS_FLAG native 
// setzen.

package ServerAufg2;
//ist im Bsp auch so
import java.util.Properties;
import org.omg.CORBA.*;
import org.omg.CosNaming.*;
import VierGewinnt.*;
import java.io.*;

/**
 * Bindet den PartieManager, den JAVAMeister und den C++Meister in den 
 * NameService ein.<br>
 * Initialisiert den ORB und den BOA, instanziert die drei Objekte und 
 * aktiviert sie mit Hilfe des BOAs, bindet sie in den NameService ein und 
 * wartet dann auf eingehende Anfragen.
 * @author Michael Dom, Wolfgang Westje
 */
public class Server {

  public static void main(String[] args) {
      ORB orb = ORB.init(args, null);
            
      PartieManager manager = new PartieManagerImpl();
      Meister JAVAMeister = new MeisterImpl();

      orb.connect(manager);
      System.out.println("Manager ist bereit.");
      
      orb.connect(JAVAMeister);
      System.out.println("JAVAMeister ist bereit.");
      
      
      // HIER BEGINNT IHRE AUFGABE
       
      try{
	  //den Nameservice als Anfang von allem suchen und finden 
	  NamingContext ctx = NamingContextHelper.narrow(orb.resolve_initial_references("NameService"));
	  NamingContext objref = ctx;
	  System.out.println("NameService ist da");
	  //Verzeichnis 4 gewinnt bauen und unter NameService einhängen
	  NameComponent nc1 = new NameComponent("4 gewinnt", "directory");
	  NameComponent[] name1 = {nc1};
	  NamingContext ctx1 = ctx.bind_new_context(name1);
	  System.out.println("das Verzeichnis \"4 gewinnt\" eingehängt..");
	  
	  //Verzeichnis Computergegner bauen und unter 4 gewinnt einhängen
	  NameComponent nc2 = new NameComponent("Computergegner", "directory");
	  NameComponent[] name2 = {nc2};
	  NamingContext ctx2 = ctx1.bind_new_context(name2);
	  System.out.println("das Verzeichnis \"Computergegner\" eingehängt..");
	  
	  //Verzeichnis Partiemanager bauen und unter 4 gewinnt einhängen
	  NameComponent nc3 = new NameComponent("Partiemanager", "directory");
	  NameComponent[] name3 = {nc3};
	  NamingContext ctx3 = ctx1.bind_new_context(name3);
	  System.out.println("das Verzeichnis \"Partiemanager\" eingehängt..");
	  
	  //Objectnamen javameister in Verzeichnis Computergegner einhängen
	  NameComponent nc5 = new NameComponent("javameister", "object");
	  NameComponent[] name5 = {nc5};
	  ctx2.rebind(name5, JAVAMeister);
	  System.out.println("javameister druntergehängt");
	  
	  //Objectnamen manager in Verzeichnis Partiemanager einhängen
	  NameComponent nc6 = new NameComponent("manager", "object");
	  NameComponent[] name6 = {nc6};
	  ctx3.rebind(name6, manager);
	  System.out.println("manager druntergehängt");
	  Thread.currentThread().join();
      }
      catch(Exception e){System.out.println("Error: "+e.toString());}
      // HIER ENDET IHRE AUFGABE
      
  }
}



