/* * Created by Andrey Cherkashin (acherkashin) * http://acherkashin.me * * License * Copyright (c) 2015 Andrey Cherkashin * The project released under the MIT license: http://opensource.org/licenses/MIT */ package ragefist.core.environment; import org.luaj.vm2.LuaTable; import org.luaj.vm2.LuaValue; import ragefist.core.Processor; import ragefist.core.ProcessorTask; /** * EnvironmentCallTask is used to make calls to a Lua environment * @author acherkashin */ public class EnvironmentCallTask extends ProcessorTask { protected final String _lua; protected final LuaTable _args; // ---------------------------------------------------------------------- // // PUBLIC // ---------------------------------------------------------------------- // public EnvironmentCallTask() { this(null); } public EnvironmentCallTask(String luaCommand) { this(luaCommand, null); } public EnvironmentCallTask(String luaCommand, LuaTable args) { super(); setAsync(true); _lua = luaCommand; _args = args; } @Override public boolean _executeImpl(Processor processor) { EnvironmentProcessor target = (EnvironmentProcessor)processor; String lua = "do local arg = ...;\n"+ "Processor.addTask(function()\n" + "local fn = function(args) "+_lua+" end;\n" + "Processor.onTaskFinish(arg[1], fn(arg[2]))\n" + "end); end;\n"; LuaValue[] args; if (_args != null) { args = new LuaValue[] { LuaValue.userdataOf(this), _args }; } else { args = new LuaValue[] { LuaValue.userdataOf(this) }; } target.getGlobals().load(lua).invoke(LuaTable.listOf(args)); return true; } }