public void Run(object obj) { #if NETFRAMEWORK LuaInstance lua = null; try { lua = LuaCache.GetInstance(); // Start thread queries to each node. StartThreads(); lua.LoadPackage(statement); object[] args = new object[4 + statement.functionArgs.Length]; args[0] = lua.GetFunction(statement.functionName); args[1] = 2; args[2] = new LuaInputStream(inputQueue, cancel.Token); args[3] = new LuaOutputStream(resultSet); int count = 4; foreach (Value value in statement.functionArgs) { args[count++] = value.Object; } lua.Call("apply_stream", args); } catch (Neo.IronLua.LuaRuntimeException lre) { // Try to get that elusive lua stack trace. HandleException(new Exception(lre.Message + lre.StackTrace)); } catch (Exception e) { if (e.InnerException is Neo.IronLua.LuaRuntimeException) { // Try to get that elusive lua stack trace. Neo.IronLua.LuaRuntimeException lre = e.InnerException as Neo.IronLua.LuaRuntimeException; HandleException(new Exception(lre.Message + lre.StackTrace)); } else { HandleException(e); } } finally { // Send end command to user's result set. // If query was already cancelled, this put will be ignored. resultSet.Put(ResultSet.END); if (lua != null) { LuaCache.PutInstance(lua); } } #else HandleException(new AerospikeException("Lua not supported in .NET core")); #endif }
public override void Write(object obj) { object target = LuaInstance.LuaToObject(obj); resultSet.Put(target); }