package org.jacorb.test.notification;
import org.junit.Assert;
import org.omg.CORBA.Any;
import org.omg.CORBA.ORB;
import org.omg.CosEventChannelAdmin.AlreadyConnected;
import org.omg.CosEventChannelAdmin.ConsumerAdmin;
import org.omg.CosEventChannelAdmin.EventChannel;
import org.omg.CosEventChannelAdmin.EventChannelHelper;
import org.omg.CosEventChannelAdmin.ProxyPushSupplier;
import org.omg.CosEventChannelAdmin.TypeError;
import org.omg.CosEventComm.Disconnected;
import org.omg.CosEventComm.PushConsumerPOA;
/**
* @author Alphonse Bendt
*/
public class CosEventPushReceiver extends PushConsumerPOA implements Runnable, TestClientOperations
{
Any event_;
long timeout_ = 2000;
boolean received_ = false;
boolean connected_;
ProxyPushSupplier mySupplier_;
final ORB orb_;
public CosEventPushReceiver(ORB orb)
{
orb_ = orb;
}
public void setTimeOut(long t)
{
timeout_ = t;
}
public void push(Any event) throws Disconnected
{
synchronized (this)
{
event_ = event;
notifyAll();
}
}
public void disconnect_push_consumer()
{
connected_ = false;
}
public void run()
{
if (event_ == null)
{
synchronized (this)
{
try
{
wait(timeout_);
} catch (InterruptedException e)
{
// ignored
}
}
}
if (event_ != null)
{
received_ = true;
}
}
public boolean isEventHandled()
{
return received_;
}
public boolean isConnected()
{
return connected_;
}
public boolean isError()
{
return false;
}
public void connect(org.omg.CosNotifyChannelAdmin.EventChannel channel, boolean useOrSemantic)
throws AlreadyConnected, TypeError
{
EventChannel _channel = EventChannelHelper.narrow(channel);
Assert.assertNotNull(_channel);
ConsumerAdmin _admin = _channel.for_consumers();
Assert.assertNotNull(_admin);
mySupplier_ = _admin.obtain_push_supplier();
Assert.assertNotNull(mySupplier_);
mySupplier_.connect_push_consumer(_this(orb_));
connected_ = true;
}
public void shutdown()
{
mySupplier_.disconnect_push_supplier();
}
}