#include <fstream.h>
#include "Gsnitt_s.hh"

class Math_impl : public virtual POA_Math {
public:
  CORBA::Double add(CORBA::Double x, CORBA::Double y) 
    throw (CORBA::SystemException) {
    return x + y;
  }
};

int main(int argc, char* const* argv) 
{
    try {

	//
	// Følgende er ikke applikasjonsspesifikk
	//

	// Initialiser ORB'en
	CORBA::ORB_var orb = CORBA::ORB_init(argc, argv);

	// Få referanse til rot-poa
	CORBA::Object_var obj = orb->resolve_initial_references("RootPOA");
	PortableServer::POA_var rootPOA = PortableServer::POA::_narrow(obj);
    
	// Få referanse til og aktiviser poa-forvalter
	PortableServer::POAManager_var poa_manager = rootPOA->the_POAManager();
	poa_manager->activate();

	//
	// Lag og aktiviser servant
	//

	// Lag servant
	Math_impl servant;
	Math_var m = servant._this();

	// Skriv referanse til fil
	CORBA::String_var str = orb->object_to_string(m);
	ofstream refFile("ior.dat");
	refFile << str << endl;
	refFile.close();
	
	// Klar
	cout << "Tjener er klar" << endl; 

	// Vent på forespørsler
	orb->run();

    } catch(const CORBA::Exception& e) {
	cerr << e << endl;
	return 1;
    }
    return 0;
}
