76 lines
2.3 KiB
Java
76 lines
2.3 KiB
Java
|
|
package scripting;
|
||
|
|
|
||
|
|
import java.util.Iterator;
|
||
|
|
|
||
|
|
import tools.FilePrinter;
|
||
|
|
|
||
|
|
import javax.script.ScriptEngine;
|
||
|
|
import javax.script.Invocable;
|
||
|
|
import java.util.LinkedHashMap;
|
||
|
|
|
||
|
|
import handling.channel.ChannelServer;
|
||
|
|
|
||
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
||
|
|
import java.util.Map;
|
||
|
|
import javax.script.ScriptException;
|
||
|
|
|
||
|
|
public class EventScriptManager extends AbstractScriptManager {
|
||
|
|
|
||
|
|
private final Map<String, EventEntry> events = new LinkedHashMap<>();
|
||
|
|
private final AtomicInteger runningInstanceMapId = new AtomicInteger(0);
|
||
|
|
|
||
|
|
public final int getNewInstanceMapId() {
|
||
|
|
return this.runningInstanceMapId.addAndGet(1);
|
||
|
|
}
|
||
|
|
|
||
|
|
public EventScriptManager(final ChannelServer cserv, final String[] scripts) {
|
||
|
|
super();
|
||
|
|
for (final String script : scripts) {
|
||
|
|
if (!script.equals("")) {
|
||
|
|
final Invocable iv = this.getInvocable("event/" + script + ".js", null);
|
||
|
|
if (iv != null) {
|
||
|
|
this.events.put(script, new EventEntry(script, iv, new EventManager(cserv, iv, script)));
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public final EventManager getEventManager(final String event) {
|
||
|
|
final EventEntry entry = (EventEntry) this.events.get(event);
|
||
|
|
if (entry == null) {
|
||
|
|
return null;
|
||
|
|
}
|
||
|
|
return entry.em;
|
||
|
|
}
|
||
|
|
|
||
|
|
public final void init() {
|
||
|
|
for (final EventEntry entry : this.events.values()) {
|
||
|
|
try {
|
||
|
|
((ScriptEngine) entry.iv).put("em", entry.em);
|
||
|
|
entry.iv.invokeFunction("init", (Object[]) null);
|
||
|
|
} catch (NoSuchMethodException | ScriptException ex) {
|
||
|
|
System.err.println("Error initiating event: " + entry.script + ":" + ex);
|
||
|
|
FilePrinter.printError("EventScriptManager.txt", "Error initiating event: " + entry.script + ":" + ex);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public final void cancel() {
|
||
|
|
for (final EventEntry entry : this.events.values()) {
|
||
|
|
entry.em.cancel();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
private static class EventEntry {
|
||
|
|
public String script;
|
||
|
|
public Invocable iv;
|
||
|
|
public EventManager em;
|
||
|
|
|
||
|
|
public EventEntry(final String script, final Invocable iv, final EventManager em) {
|
||
|
|
this.script = script;
|
||
|
|
this.iv = iv;
|
||
|
|
this.em = em;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|