package org.epics.pvmanager.measurements;
import gov.aps.jca.Channel;
import gov.aps.jca.Context;
import gov.aps.jca.Monitor;
import gov.aps.jca.dbr.DBRType;
import gov.aps.jca.event.ConnectionEvent;
import gov.aps.jca.event.ConnectionListener;
import gov.aps.jca.event.GetEvent;
import gov.aps.jca.event.GetListener;
import gov.aps.jca.event.MonitorEvent;
import gov.aps.jca.event.MonitorListener;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import org.epics.pvmanager.PVManager;
import org.epics.pvmanager.jca.JCADataSource;
/**
* Hello world!
*
*/
public class JCAMassConnectionDelay
{
public static void main( String[] args ) throws Exception {
final StopWatch watch = new StopWatch();
final CountDownLatch latch = new CountDownLatch(args.length * 2);
watch.start();
final List<Channel> channels = new ArrayList<Channel>();
for (String string : args) {
JCADataSource source = (JCADataSource) PVManager.getDefaultDataSource();
final Context context = source.getContext();
Channel channel = context.createChannel(string, new ConnectionListener() {
@Override
public void connectionChanged(ConnectionEvent ev) {
try {
Channel channel = (Channel) ev.getSource();
channel.get(DBRType.CTRL_DOUBLE, 1, new GetListener() {
@Override
public void getCompleted(GetEvent ev) {
if (ev.getDBR().hashCode() == 12345678) {
System.out.println("Ping");
}
latch.countDown();
}
});
channel.addMonitor(DBRType.TIME_DOUBLE, 1, Monitor.VALUE, new MonitorListener() {
@Override
public void monitorChanged(MonitorEvent ev) {
if (ev.getDBR().hashCode() == 12345678) {
System.out.println("Ping");
}
latch.countDown();
}
});
context.flushIO();
} catch (Exception ex) {
}
}
});
channels.add(channel);
}
latch.await();
watch.stop();
for (Channel channel : channels) {
channel.dispose();
}
watch.printLast(System.out);
}
}