package me.hammerle.snuviscript.code; import me.hammerle.snuviscript.inputprovider.InputProvider; import java.util.Collection; import java.util.Collections; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.function.Consumer; import me.hammerle.snuviscript.exceptions.PreScriptException; import me.hammerle.snuviscript.exceptions.StackTrace; public class ScriptManager { private final ISnuviLogger logger; private final ISnuviScheduler scheduler; private final ConcurrentHashMap scripts = new ConcurrentHashMap<>(); private final ConcurrentHashMap> loadedEvents = new ConcurrentHashMap<>(); public ScriptManager(ISnuviLogger logger, ISnuviScheduler scheduler) { this.logger = logger; this.scheduler = scheduler; } public ISnuviLogger getLogger() { return logger; } public ISnuviScheduler getScheduler() { return scheduler; } public void registerFunction(String s, ExceptionBiFunction f) { FunctionRegistry.registerFunction(s, f); } public void registerConsumer(String s, ExceptionBiConsumer f) { FunctionRegistry.registerConsumer(s, f); } public void registerAlias(String original, String alias) { FunctionRegistry.registerAlias(original, alias); } public Script getScript(int id) { return scripts.get(id); } public void removeScript(Script sc) { sc.term(); sc.onTerm(); scripts.remove(sc.getId()); loadedEvents.values().forEach(list -> list.remove(sc)); } private void addScript(Script sc) { scripts.put(sc.getId(), sc); sc.run(); if(sc.shouldTerm()) { removeScript(sc); } } public void removeScripts() { scripts.values().forEach(sc -> { sc.term(); sc.onTerm(); }); scripts.clear(); loadedEvents.values().forEach(list -> list.clear()); } public Collection