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