コード例 #1
0
ファイル: clsChakra.cs プロジェクト: git-thinh/cache_redis
        public static oResult test_2(Dictionary <string, object> request = null)
        {
            oResult rs = new oResult()
            {
                ok = false, request = request
            };

            using (new JavaScriptContext.Scope(js_context))
            {
                string script = "(()=>{ var val = ___api.test('TEST_2: Hello world'); ___api.log('api-js.test-2', 'key-2', 'TEST_2: This log called by JS...'); return val; })()";

                try
                {
                    JavaScriptValue result = JavaScriptContext.RunScript(script, CURRENT_SOURCE_CONTEXT++, string.Empty);
                    rs.data = result.ConvertToString().ToString();
                    rs.ok   = true;
                }
                catch (JavaScriptScriptException e)
                {
                    var messageName = JavaScriptPropertyId.FromString("message");
                    rs.error = "ERROR_JS_EXCEPTION: " + e.Error.GetProperty(messageName).ConvertToString().ToString();
                }
                catch (Exception e)
                {
                    rs.error = "ERROR_CHAKRA: failed to run script: " + e.Message;
                }
            }
            return(rs);
        }
コード例 #2
0
ファイル: clsChakra.cs プロジェクト: git-thinh/cache_redis
        public static oResult run_api(Dictionary <string, object> request = null)
        {
            oResult rs = new oResult()
            {
                ok = false, request = request
            };

            string scope = request.getValueByKey("___scope");

            if (string.IsNullOrEmpty(scope))
            {
                rs.error = "[___scope] is null or empty";
                return(rs);
            }

            if (!clsApi.Exist(scope))
            {
                rs.error = "[___scope] = " + scope + " is not exist";
                return(rs);
            }

            string sapi = request.getValueByKey("___api");

            if (string.IsNullOrEmpty(sapi))
            {
                rs.error = "[___api] is null or empty";
                return(rs);
            }

            oApi o = clsApi.Get(scope);

            if (o.apis.Length == 0)
            {
                rs.error = "folder " + scope + " missing files api: " + sapi.Replace("|", ".js; ") + ".js";
                return(rs);
            }

            sapi = sapi.ToLower().Trim();
            string[]      a  = sapi.Split('|');
            StringBuilder bi = new StringBuilder();

            bi.Append("(()=>{ ");
            bi.Append(Environment.NewLine);
            bi.Append("var ___scope = 'API-JS." + scope + "." + sapi + "'; ");
            bi.Append(Environment.NewLine);
            bi.Append("var ___log = function(key,text){ ___api.log(___scope, key, text); }; ");
            bi.Append(Environment.NewLine);
            bi.Append("var ___para = ");
            bi.Append(JsonConvert.SerializeObject(request));
            bi.Append(Environment.NewLine);
            bi.Append(Environment.NewLine);

            for (var i = 0; i < a.Length; i++)
            {
                if (o.apis_data.ContainsKey(a[i]) == false)
                {
                    rs.error = "folder " + scope + " missing files api: " + a[i] + ".js";
                    return(rs);
                }
                bi.Append(o.apis_data[a[i]]);
                bi.Append(Environment.NewLine);
                bi.Append(Environment.NewLine);
            }

            bi.Append(Environment.NewLine);
            bi.Append(" })()");

            string script = bi.ToString();

            using (new JavaScriptContext.Scope(js_context))
            {
                try
                {
                    JavaScriptValue result = JavaScriptContext.RunScript(script, CURRENT_SOURCE_CONTEXT++, string.Empty);
                    string          v      = result.ConvertToString().ToString();
                    if (v == "undefined")
                    {
                        rs.data = null;
                    }
                    else
                    {
                        rs.data = v;
                    }
                    rs.ok = true;
                }
                catch (JavaScriptScriptException e)
                {
                    var messageName = JavaScriptPropertyId.FromString("message");
                    rs.error = "ERROR_JS_EXCEPTION: " + e.Error.GetProperty(messageName).ConvertToString().ToString();
                }
                catch (Exception e)
                {
                    rs.error = "ERROR_CHAKRA: failed to run script: " + e.Message;
                }
            }
            return(rs);
        }