package org.jacorb.test.notification; import org.junit.Assert; import org.omg.CORBA.BooleanHolder; import org.omg.CORBA.IntHolder; import org.omg.CORBA.ORB; import org.omg.CosEventChannelAdmin.AlreadyConnected; import org.omg.CosEventComm.Disconnected; import org.omg.CosNotification.EventType; import org.omg.CosNotification.StructuredEvent; import org.omg.CosNotifyChannelAdmin.AdminLimitExceeded; import org.omg.CosNotifyChannelAdmin.ClientType; import org.omg.CosNotifyChannelAdmin.ConsumerAdmin; import org.omg.CosNotifyChannelAdmin.EventChannel; import org.omg.CosNotifyChannelAdmin.ProxyType; import org.omg.CosNotifyChannelAdmin.StructuredProxyPullSupplier; import org.omg.CosNotifyChannelAdmin.StructuredProxyPullSupplierHelper; import org.omg.CosNotifyComm.StructuredPullConsumerHelper; import org.omg.CosNotifyComm.StructuredPullConsumerOperations; import org.omg.CosNotifyComm.StructuredPullConsumerPOATie; import org.omg.PortableServer.POA; public class StructuredPullReceiver extends Thread implements StructuredPullConsumerOperations, TestClientOperations { StructuredEvent event_ = null; ORB orb_; POA poa_; boolean connected_; StructuredProxyPullSupplier pullSupplier_; boolean received_; long TIMEOUT = 2000; boolean error_; public StructuredPullReceiver(ORB orb) { super(); orb_ = orb; } public boolean isConnected() { return connected_; } public void connect(EventChannel channel, boolean useOrSemantic) throws AdminLimitExceeded, AlreadyConnected { StructuredPullConsumerPOATie _receiverTie = new StructuredPullConsumerPOATie(this); ConsumerAdmin _consumerAdmin = channel.default_consumer_admin(); IntHolder _proxyId = new IntHolder(); pullSupplier_ = StructuredProxyPullSupplierHelper.narrow(_consumerAdmin .obtain_notification_pull_supplier(ClientType.STRUCTURED_EVENT, _proxyId)); Assert.assertEquals(pullSupplier_.MyType(), ProxyType.PULL_STRUCTURED); pullSupplier_.connect_structured_pull_consumer(StructuredPullConsumerHelper .narrow(_receiverTie._this(orb_))); connected_ = true; } public void shutdown() { Assert.assertTrue(!pullSupplier_._non_existent()); pullSupplier_.disconnect_structured_pull_supplier(); Assert.assertTrue(pullSupplier_._non_existent()); pullSupplier_ = null; } public boolean isEventHandled() { return event_ != null; } public boolean isError() { return false; } public void run() { BooleanHolder _success = new BooleanHolder(); _success.value = false; long _startTime = System.currentTimeMillis(); try { while (true) { event_ = pullSupplier_.try_pull_structured_event(_success); if (_success.value) { received_ = true; break; } if (System.currentTimeMillis() < _startTime + TIMEOUT) { Thread.yield(); } else { received_ = false; break; } } } catch (Disconnected d) { d.printStackTrace(); error_ = true; } } public void push_structured_event(StructuredEvent event) { synchronized (this) { event_ = event; this.notifyAll(); } } public void disconnect_structured_pull_consumer() { connected_ = false; } public void offer_change(EventType[] e1, EventType[] e2) { // ignored } }