///////////////////////////////////////////////////////////// // ListenerServer.cc // 18 January 2005 ///////////////////////////////////////////////////////////// #include "ListenerServer.h" #include #include #include #include #include void ListenerServer::push(const CORBA::Any & data) { CORBA::ULong balance; try { data >>= balance; cout << "New Balance is " << balance << endl; } catch (...) { cerr << "unsupported type pushed into the channel" << endl; } } void ListenerServer::disconnect_push_consumer() { } int main(int argc, char* argv[]) { /* * Initialize the ORB */ CORBA::ORB_var orb = CORBA::ORB_init (argc, argv, "mico-local-orb"); CORBA::BOA_var boa = orb->BOA_init (argc, argv, "mico-local-boa"); /* * Create a ListenerServer */ ListenerServer * ls = new ListenerServer; /* * Acquire a reference to the Naming Service */ CORBA::Object_var nsobj = orb->resolve_initial_references ("NameService"); CosNaming::NamingContext_var nc = CosNaming::NamingContext::_narrow (nsobj); if (CORBA::is_nil (nc)) { cerr << "oops, I cannot access the Naming Service!" << endl; exit (1); } /* * Construct Naming Service name for our Event Channel */ cout << "Obtaining objref for Event Channel " << endl; CosNaming::Name name; name.length (1); name[0].id = CORBA::string_dup ("AccountBalanceChannel"); name[0].kind = CORBA::string_dup (""); CORBA::Object_var ref = nc->resolve(name); CosEventChannelAdmin::EventChannel_var ec = CosEventChannelAdmin::EventChannel::_narrow(ref); cout << "Connecting Listener to Account Balance Channel" << endl; CosEventChannelAdmin::ProxyPushSupplier_var pps; try { pps= ec->for_consumers()->obtain_push_supplier(); } catch (...) { cerr << "could not obtain push supplier" <connect_push_consumer(ListenerServer::_duplicate(ls)); } catch (...) { cerr << "could not subscribe listener server to event channel" << endl; } cout << "done." << endl; /* * Shutdown (never reached) */ boa->impl_is_ready(CORBA::ImplementationDef::_nil()) ; orb->run() ; CORBA::release(ec) ; }