import ch.psi.pshell.scan.Scan; import ch.psi.pshell.scan.ScanListener; import ch.psi.pshell.scan.ScanRecord; import ch.psi.pshell.ui.Plugin; import ch.psi.utils.State; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPubSub; /** * */ public class Redis implements Plugin { public static final String KEY_START = "Scan Start"; public static final String KEY_RECORD = "Record"; public static final String KEY_END = "Scan End"; public static final String CHANNEL_START = "Scan Start"; public static final String CHANNEL_RECORD = "Record"; public static final String CHANNEL_END = "Scan End"; Jedis jedis; final ScanListener listener = new ScanListener() { @Override public void onScanStarted(Scan scan, String plotTitle) { jedis.publish(CHANNEL_START, scan.getResult().toString()); jedis.set(KEY_START, scan.getResult().toString()); jedis.del(KEY_RECORD); jedis.del(KEY_END); } @Override public void onNewRecord(Scan scan, ScanRecord record) { jedis.publish(CHANNEL_RECORD, record.toString()); jedis.lpush(KEY_RECORD, record.toString()); } @Override public void onScanEnded(Scan scan, Exception ex) { jedis.publish(CHANNEL_END,scan.getResult().getPath()); jedis.set(KEY_END,scan.getResult().getPath()); } }; //Overridable callbacks @Override public void onStart() { jedis = new Jedis(); getContext().addScanListener(listener); } @Override public void onStop() { getContext().removeScanListener(listener); if (jedis!=null){ jedis.close(); } } @Override public void onInitialize(int runCount) { } @Override public void onStateChange(State state, State former) { } @Override public void onExecutedFile(String fileName, Object result) { Jedis jSubscriber = new Jedis(); jSubscriber.subscribe(new JedisPubSub() { @Override public void onMessage(String channel, String message) { // handle message } }, "channel"); } }