package org.myrobotlab.service; import javax.script.ScriptEngineFactory; import javax.script.ScriptEngineManager; import org.myrobotlab.framework.Service; import org.myrobotlab.framework.ServiceType; import org.myrobotlab.logging.Level; import org.myrobotlab.logging.LoggerFactory; import org.myrobotlab.logging.Logging; import org.myrobotlab.logging.LoggingFactory; import org.slf4j.Logger; import io.nodyn.NoOpExitHandler; import io.nodyn.Nodyn; import io.nodyn.runtime.NodynConfig; import io.nodyn.runtime.RuntimeFactory; public class Node extends Service { private static final long serialVersionUID = 1L; public final static Logger log = LoggerFactory.getLogger(Node.class); public Node(String n) { super(n); } private static final String SCRIPT = "" + "var main = require('./project/main.js');" + "main.run();"; final ScriptEngineManager manager = new ScriptEngineManager(); public void runMain(String... args) throws InterruptedException { for (final ScriptEngineFactory scriptEngine : manager.getEngineFactories()) { System.out.println(scriptEngine.getEngineName() + " (" + scriptEngine.getEngineVersion() + ")"); System.out.println("\tLanguage: " + scriptEngine.getLanguageName() + "(" + scriptEngine.getLanguageVersion() + ")"); System.out.println("\tCommon Names/Aliases: "); for (final String engineAlias : scriptEngine.getNames()) { System.out.println(engineAlias + " "); } } // Use DynJS runtime RuntimeFactory factory = RuntimeFactory.init(Node.class.getClassLoader(), RuntimeFactory.RuntimeType.DYNJS); // Set config to run main.js NodynConfig config = new NodynConfig(new String[] { "-e", SCRIPT }); // Create a new Nodyn and run it Nodyn nodyn = factory.newRuntime(config); nodyn.setExitHandler(new NoOpExitHandler()); try { int exitCode = nodyn.run(); if (exitCode != 0) { error("exitCode != 0"); } } catch (Throwable t) { Logging.logError(t); } } /** * This static method returns all the details of the class without it having * to be constructed. It has description, categories, dependencies, and peer * definitions. * * @return ServiceType - returns all the data * */ static public ServiceType getMetaData() { ServiceType meta = new ServiceType(Node.class.getCanonicalName()); meta.addDescription("embedded node js"); // add dependency if necessary meta.setAvailable(false); // not ready for prime-time meta.addDependency("org.node", "0.1.1"); meta.addCategory("programming"); return meta; } public static void main(String[] args) { LoggingFactory.init(Level.INFO); try { Node node = (Node) Runtime.start("node", "Node"); // Runtime.start("gui", "GUIService"); node.runMain((String[])null); } catch (Exception e) { Logging.logError(e); } } }