package org.jacorb.test.notification; import org.jacorb.test.notification.common.NotificationTestCase; import org.junit.Assert; import org.omg.CORBA.Any; 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.CosNotifyChannelAdmin.AdminLimitExceeded; import org.omg.CosNotifyChannelAdmin.AdminNotFound; import org.omg.CosNotifyChannelAdmin.ClientType; import org.omg.CosNotifyChannelAdmin.EventChannel; import org.omg.CosNotifyChannelAdmin.InterFilterGroupOperator; import org.omg.CosNotifyChannelAdmin.ProxyPushConsumer; import org.omg.CosNotifyChannelAdmin.ProxyPushConsumerHelper; import org.omg.CosNotifyChannelAdmin.ProxyType; import org.omg.CosNotifyChannelAdmin.SupplierAdmin; import org.omg.CosNotifyComm.PushSupplierPOA; import org.omg.CosNotifyFilter.Filter; public class AnyPushSender extends PushSupplierPOA implements TestClientOperations, Runnable { ORB orb_; ProxyPushConsumer myConsumer_; boolean connected_; Any event_; boolean error_; long sendTime_; int runs_; long interval_; SupplierAdmin myAdmin_; NotificationTestCase testCase_; public AnyPushSender(ORB orb, Any event) { orb_ = orb; event_ = event; } void setInterval(int i) { interval_ = i; } void setEventsToSend(int i) { runs_ = i; } AnyPushSender(NotificationTestCase testCase, Any event) { event_ = event; testCase_ = testCase; } public void addAdminFilter(Filter filter) { Assert.assertNotNull(myAdmin_); myAdmin_.add_filter(filter); } public void addProxyFilter(Filter filter) { Assert.assertNotNull(myConsumer_); myConsumer_.add_filter(filter); } public void disconnect_push_supplier() { connected_ = false; } public boolean isConnected() { return connected_; } public boolean isError() { return false; } public boolean isEventHandled() { return true; } public void subscription_change(EventType[] e1, EventType[] e2) { // ignored } public void run() { singleSend(); } public void singleSend() { try { myConsumer_.push(event_); sendTime_ = System.currentTimeMillis(); } catch (Disconnected d) { error_ = true; } } public void connect(EventChannel channel, boolean useOrSemantic) throws AdminLimitExceeded, AlreadyConnected, AdminNotFound { IntHolder _proxyId = new IntHolder(); IntHolder _adminId = new IntHolder(); if (useOrSemantic) { myAdmin_ = channel.new_for_suppliers(InterFilterGroupOperator.OR_OP, _adminId); Assert.assertEquals(InterFilterGroupOperator.OR_OP, myAdmin_.MyOperator()); } else { myAdmin_ = channel.new_for_suppliers(InterFilterGroupOperator.AND_OP, _adminId); } Assert.assertEquals(myAdmin_, channel.get_supplieradmin(_adminId.value)); myConsumer_ = ProxyPushConsumerHelper.narrow(myAdmin_.obtain_notification_push_consumer( ClientType.ANY_EVENT, _proxyId)); Assert.assertEquals(ProxyType._PUSH_ANY, myConsumer_.MyType().value()); myConsumer_.connect_any_push_supplier(_this(orb_)); connected_ = true; } public void shutdown() { myConsumer_.disconnect_push_consumer(); if (myAdmin_ != null) { myAdmin_.destroy(); } } }