01: package demo.events;
02:
03: /**
04: * @authors Joerg v. Frantzius, Rainer Lischetzki, Gerald Brose 1997
05: *
06: * A simple demo for using the event channel as a push supplier of events.
07: *
08: */
09:
10: import org.omg.CosNaming.*;
11: import org.omg.CosEventChannelAdmin.*;
12: import org.omg.CosEventComm.*;
13: import org.omg.CORBA.Any;
14:
15: class PullSupplierDemo extends Thread implements PullSupplierOperations {
16: Any event = null;
17:
18: public PullSupplierDemo() {
19: start();
20: }
21:
22: public void disconnect_pull_supplier() {
23: System.out.println("Bye.");
24: }
25:
26: static public void main(String argv[]) {
27: org.omg.CosEventChannelAdmin.EventChannel e = null;
28: org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(argv, null);
29:
30: try {
31: NamingContextExt nc = NamingContextExtHelper.narrow(orb
32: .resolve_initial_references("NameService"));
33: e = EventChannelHelper.narrow(nc.resolve(nc
34: .to_name("eventchannel.example")));
35: } catch (Exception ex) {
36: ex.printStackTrace();
37: }
38:
39: SupplierAdmin supplierAdmin = e.for_suppliers();
40: ProxyPullConsumer proxyPullConsumer = supplierAdmin
41: .obtain_pull_consumer();
42:
43: try {
44: org.omg.PortableServer.POA poa = org.omg.PortableServer.POAHelper
45: .narrow(orb.resolve_initial_references("RootPOA"));
46:
47: PullSupplierPOATie pt = new PullSupplierPOATie(
48: new PullSupplierDemo());
49: pt._this _object(orb);
50: org.omg.CORBA.Object o = poa.servant_to_reference(pt);
51:
52: poa.the_POAManager().activate();
53:
54: proxyPullConsumer.connect_pull_supplier(PullSupplierHelper
55: .narrow(o));
56: } catch (Exception ex) {
57: ex.printStackTrace();
58: }
59: }
60:
61: public Any pull() throws Disconnected {
62: System.out.println("I m being pulled.");
63: event = org.omg.CORBA.ORB.init().create_any();
64: event.insert_string("Pull.");
65: return event;
66: }
67:
68: public void run() {
69: // do something
70: while (true) {
71: try {
72: synchronized (this ) {
73: wait();
74: }
75: } catch (Exception e) {
76: disconnect_pull_supplier();
77: }
78: }
79: }
80:
81: public Any try_pull(org.omg.CORBA.BooleanHolder has_event)
82: throws Disconnected {
83: System.out.println("I m being try_pulled.");
84: event = org.omg.CORBA.ORB.init().create_any();
85: event.insert_string("TryPull.");
86: has_event.value = true;
87: return event;
88: }
89: }
|