private static void _OnTaskCompleted(ScriptRuntime runtime, JSAction action) { var context = runtime.GetMainContext(); var logger = runtime.GetLogger(); var args = (JSTaskCompletionArgs)action.args; var task = args.task; var safeRelease = args.safeRelease; if (!safeRelease.isValid) { logger?.Write(LogLevel.Error, "pormise func has already been released"); return; } object result = null; var taskType = task.GetType(); if (taskType.IsGenericType && taskType.GetGenericTypeDefinition() == typeof(Task <>)) { try { result = taskType.GetProperty("Result").GetValue(task, null); } catch (Exception exception) { logger?.WriteException(exception); } } var ctx = (JSContext)context; var backVal = Binding.Values.js_push_var(ctx, result); if (backVal.IsException()) { ctx.print_exception(); safeRelease.Release(); return; } var argv = new[] { backVal }; var rval = JSApi.JS_Call(ctx, safeRelease[0], JSApi.JS_UNDEFINED, 1, argv); JSApi.JS_FreeValue(ctx, backVal); if (rval.IsException()) { ctx.print_exception(); safeRelease.Release(); return; } JSApi.JS_FreeValue(ctx, rval); safeRelease.Release(); context.GetRuntime().ExecutePendingJob(); }
public ValueModuleRegister(ScriptRuntime runtime, JSValue bind) { _runtime = runtime; _runtime.OnDestroy += OnDestroy; _rawValue = JSApi.JS_DupValue(_runtime.GetMainContext(), bind); }
private static void _EvalSource(ScriptRuntime runtime, JSAction value) { var args = (JSSourceArgs)value.args; runtime.GetMainContext().EvalSource(args.source, args.src); }