//Editor-Info: -*- C++ -*-
//
//Subject: TOVE project / testing/event
//
//File: pushconsumer.cpp
//
//Version: $Revision: 1.1 $
//
//State: $State: Exp $
//
//Date: $Date: 1998/07/10 11:45:32 $
//
//Organisation:
//      Helsinki University of Technology
//      Laboratory of Telecommunications Software and Multimedia
//
//Author:
//      Timo Kokkonen
//
//Description:
//      
//
//Copyright:
//      Copyright 1999 Helsinki University of Technology
//      ALL RIGHTS RESERVED BETWEEN JANUARY 1996 AND JUNE 1999.
//
//Licence:
//
//
//History:
//
#include <OB/CORBA.h>
#include <OB/Util.h>
#include <OB/CosEventChannelAdmin.h>

#include "pushconsumer_impl.h"

//#include <stdlib.h>
 
int run(CORBA_ORB_ptr orb, int argc, char* argv[])
{
    //
    // Get event channel
    //
    CORBA_Object_var obj;

    try
    {
        obj = orb -> resolve_initial_references("DebugEventService");
    }

    catch (const CORBA_ORB::InvalidName&)
    {
        cerr << argv[0] << ": can't resolve `EventService'" << endl;
        return 1;
    }

    if (CORBA_is_nil(obj))
    {
        cerr << argv[0] << ": `EventService' is a nil object reference"
             << endl;
        return 1;
    }

    CosEventChannelAdmin_EventChannel_var e =
	CosEventChannelAdmin_EventChannel::_narrow(obj);

    if (CORBA_is_nil(e))
    {
        cerr << argv[0]
             << ": `EventService' is not an EventChannel object reference"
             << endl;
        return 1;
    }

    //
    // Create BOA
    //
    CORBA_BOA_var boa = orb -> BOA_init(argc, argv);

    //
    // Get ProxyPushSupplier
    //
    CosEventChannelAdmin_ConsumerAdmin_var consumerAdmin =
	e -> for_consumers();
    CosEventChannelAdmin_ProxyPushSupplier_var supplier =
	consumerAdmin -> obtain_push_supplier();

    //
    // Connect implementation to ProxyPushSupplier
    //
    PushConsumer_impl* consumer = new PushConsumer_impl(supplier);
    supplier -> connect_push_consumer(consumer);

    //
    // Run implementation
    //
    boa -> impl_is_ready(CORBA_ImplementationDef::_nil());

    return 0;
}

//----------------------------------------------------------------------

int main(int argc, char* argv[], char*[])
{
    int status;
 
    try
    {
        //
        // Create ORB
        //
        CORBA_ORB_var orb = CORBA_ORB_init(argc, argv);

        //
        // Run
        //
        status = run(orb, argc, argv);
    }

    catch (CORBA_SystemException& ex)
    {
        OBPrintException(ex);
        status = 1;
    }

    return status;
}
