package org.jacorb.demo.events; /** * @authors Joerg v. Frantzius, Rainer Lischetzki, Gerald Brose 1997 * * A simple demo for using the event channel as a push consumer * of events. This consumer unregisters and quits after receiving * 5 events. * */ import org.omg.CosEventChannelAdmin.*; import org.omg.CosEventComm.*; import org.omg.CosNaming.*; public class PushConsumerDemo implements PushConsumerOperations { private short count = 0; private ProxyPushSupplier myPps = null; private int limit = 25; static org.omg.CORBA.ORB orb = null; public PushConsumerDemo( ProxyPushSupplier _pps ) { myPps = _pps; } public void disconnect_push_consumer() { System.out.println("Consumer disconnected."); } static public void main (String[] args) { EventChannel ecs = null; ConsumerAdmin ca = null; PushConsumer pushConsumer = null; ProxyPushSupplier pps = null; try { orb = org.omg.CORBA.ORB.init(args, null); NamingContextExt nc = NamingContextExtHelper.narrow( orb.resolve_initial_references("NameService")); ecs = EventChannelHelper.narrow(nc.resolve( nc.to_name("eventchannel.example"))); } catch(Exception e) { e.printStackTrace(); } ca = ecs.for_consumers(); pps = ca.obtain_push_supplier(); try { org.omg.PortableServer.POA poa = org.omg.PortableServer.POAHelper.narrow( orb.resolve_initial_references("RootPOA")); poa.the_POAManager().activate(); PushConsumerPOATie pt = new PushConsumerPOATie( new PushConsumerDemo( pps )); pt._this_object(orb); pushConsumer = PushConsumerHelper.narrow(poa.servant_to_reference(pt) ); pps.connect_push_consumer( pushConsumer ); System.out.println("PushConsumerImpl registered."); orb.run(); } catch(Exception e) { e.printStackTrace(); } System.out.println("Quit."); } public synchronized void push(org.omg.CORBA.Any data) throws org.omg.CosEventComm.Disconnected { count++; System.out.println("event " + count + " : " + data.extract_string()); if( count >= limit ) { System.out.println("unregister"); myPps.disconnect_push_supplier(); // System.exit(0); orb.shutdown(false); } } }