/*
* 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;
}
}