/** * Copyright (C) 2010-14 diirt developers. See COPYRIGHT.TXT * All rights reserved. Use is subject to license terms. See LICENSE.TXT */ package org.diirt.datasource.sample.formula; import org.diirt.datasource.ExpressionLanguage; import org.diirt.datasource.PVManager; import org.diirt.datasource.PVReader; import org.diirt.datasource.PVReaderEvent; import org.diirt.datasource.PVWriter; import java.time.Duration; /** * Indirect channel use through name passed as String. * <p> * This examples shows the opening and closing of channels based on the name * contained in another channel. For C programmers: it's a pointer. * * @author carcassi */ public class PvFunction { public static void main(String[] args) throws Exception { String indirectPv = "=pv('loc://name')"; String pvNamePv = "loc://name"; System.out.println("Starting channel " + indirectPv); PVReader<?> reader = PVManager.read(org.diirt.datasource.formula.ExpressionLanguage.formula(indirectPv)) .readListener((PVReaderEvent<Object> event) -> { System.out.println(event + " - connected(" + event.getPvReader().isConnected() + ")"); }) .maxRate(Duration.ofMillis(50)); Thread.sleep(3000); PVWriter<Object> namePv = PVManager.write(ExpressionLanguage.channel(pvNamePv)) .async(); System.out.println("Write sim://noise to " + pvNamePv); namePv.write("sim://noise"); Thread.sleep(3000); System.out.println("Write sim://asdf to " + pvNamePv); namePv.write("sim://asdf"); Thread.sleep(3000); System.out.println("Write sim://noise to " + pvNamePv); namePv.write("sim://noise"); Thread.sleep(3000); System.out.println("Closing..."); reader.close(); namePv.close(); PVManager.getDefaultDataSource().close(); System.out.println("Done"); } }