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.concurrent.CountDownLatch; import org.epics.pvmanager.PVManager; import org.epics.pvmanager.jca.JCADataSource; import static org.epics.pvmanager.ExpressionLanguage.*; import static org.epics.pvmanager.util.TimeDuration.*; /** * Hello world! * */ public class JCAConnectionDelay { public static void main( String[] args ) throws Exception { final StopWatch watch = new StopWatch(); for (String string : args) { final CountDownLatch latch = new CountDownLatch(2); watch.start(); 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) { } } }); try { latch.await(); } catch (InterruptedException ex) { } watch.stop(); channel.dispose(); } watch.printStatisticsMS(System.out); } }