Exemplo n.º 1
0
        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();
        }
Exemplo n.º 2
0
 public ValueModuleRegister(ScriptRuntime runtime, JSValue bind)
 {
     _runtime            = runtime;
     _runtime.OnDestroy += OnDestroy;
     _rawValue           = JSApi.JS_DupValue(_runtime.GetMainContext(), bind);
 }
Exemplo n.º 3
0
        private static void _EvalSource(ScriptRuntime runtime, JSAction value)
        {
            var args = (JSSourceArgs)value.args;

            runtime.GetMainContext().EvalSource(args.source, args.src);
        }