Beispiel #1
0
        public static void DequeueCallbacks()
        {
            while (Callbacks.Count > 0)
            {
                ICallback item;

                if (Callbacks.TryDequeue(out item))
                {
                    try
                    {
                        if (item is Objects.JSHttpRequestResult)
                        {
                            Objects.JSHttpRequestResult obj = (Objects.JSHttpRequestResult)item;
                            JSScript script = Scripts.Find(x => x.ScriptName == item.ScriptName);

                            if (script != null)
                            {
                                obj.Callback.Call(obj, !String.IsNullOrEmpty(obj.Data));
                            }
                        }
                        else if (item is Objects.JSAvatarImage)
                        {
                            Objects.JSAvatarImage obj = (Objects.JSAvatarImage)item;
                            JSScript script           = Scripts.Find(x => x.ScriptName == item.ScriptName);

                            if (script != null)
                            {
                                obj.Callback.Call(obj, obj.Data != null);
                            }
                        }
                        else if (item is Objects.JSScribbleImage)
                        {
                            Objects.JSScribbleImage obj = (Objects.JSScribbleImage)item;
                            JSScript script             = Scripts.Find(x => x.ScriptName == item.ScriptName);

                            if (script != null)
                            {
                                obj.Callback.Call(obj, obj.Data != null);
                            }
                        }
                        else if (item is Objects.JSProxyCheckResult)
                        {
                            Objects.JSProxyCheckResult obj = item as Objects.JSProxyCheckResult;
                            JSScript script = Scripts.Find(x => x.ScriptName == item.ScriptName);

                            if (script != null)
                            {
                                obj.Callback.Call(obj, obj.User, obj);
                            }
                        }
                    }
                    catch { }
                }
                else
                {
                    break;
                }
            }
        }
        public static bool Load(String f, bool update_autorun)
        {
            FileInfo file = null;

            try
            {
                file = new FileInfo(f);
                file = new FileInfo(Path.Combine(Server.DataPath, file.Name, file.Name));
            }
            catch { return(false); }

            if (file.Name == "room")
            {
                return(false);
            }

            int index = Scripts.FindIndex(x => x.ScriptName == file.Name);

            if (index > 0)
            {
                Scripts[index].KillScript();
                Scripts.RemoveAt(index);
            }

            JSScript script = new JSScript(file.Name);

            if (File.Exists(file.FullName))
            {
                Scripts.Add(script);

                if (script.LoadScript(file.FullName))
                {
                    try
                    {
                        script.JS.CallGlobalFunction("onLoad");
                    }
                    catch (Jurassic.JavaScriptException e)
                    {
                        ErrorDispatcher.SendError(script.ScriptName, e.Message, e.LineNumber);
                    }
                    catch { }

                    if (update_autorun)
                    {
                        UpdateAutorun();
                    }

                    return(true);
                }
            }

            return(false);
        }
        public static void UpdateTimers()
        {
            ulong time = Server.Ticks;

            if (list.Count > 0)
            {
                for (int i = (list.Count - 1); i > -1; i--)
                {
                    if (list[i].StartTime <= (time - (ulong)list[i].Interval))
                    {
                        Instances.JSTimerInstance timer = list[i];
                        list.RemoveAt(i);
                        JSScript script = ScriptManager.Scripts.Find(x => x.ScriptName == timer.Engine.ScriptName);

                        if (script != null)
                        {
                            if (script.timer_idents.Contains(timer.IDENT))
                            {
                                try
                                {
                                    if (timer.Callback != null)
                                    {
                                        timer.Callback.Call(timer.Engine.Global);
                                    }
                                }
                                catch (JavaScriptException e)
                                {
                                    ErrorDispatcher.SendError(timer.ScriptName, e.Message, e.LineNumber);
                                }
                                catch { }
                            }
                        }
                    }
                }
            }
        }