Пример #1
0
        public static void Poll()
        {
            var update_list  = new List <ScriptController>();
            var remove_state = false;

            lock (controller_list_sync_) {
                /* 実行 */
                foreach (var controller in controller_list_)
                {
                    if ((controller.Poll()) && (!controller.IsDetach))
                    {
                        update_list.Add(controller);
                    }
                }

                /* デタッチ済みスクリプトを解放 */
                remove_state = (controller_list_.RemoveAll(script => script.IsDetach) > 0);

                /* アップデートリストから削除済みコントローラを削除する */
                update_list.RemoveAll(controller => !controller_list_.Contains(controller));
            }

            if (update_list.Count > 0)
            {
                update_list.ForEach(controller => ControllerStatusUpdated?.Invoke(controller));
            }

            if (remove_state)
            {
                ControllerListUpdated?.Invoke();
            }
        }
Пример #2
0
        public static ScriptController Register(string script_path, ScriptRunMode mode)
        {
            if (script_path == null)
            {
                return(null);
            }

            /* ファイルが存在しなければ無視 */
            if (!File.Exists(script_path))
            {
                return(null);
            }

            var controller   = (ScriptFileController)null;
            var add_state    = false;
            var update_state = false;

            lock (controller_list_sync_) {
                /* 登録リストから検索 */
                controller = controller_list_.Find(script => script.ScriptPath == script_path);

                /* 未登録の場合は新規登録 */
                if (controller == null)
                {
                    controller = new ScriptFileController(script_path);
                    controller_list_.Add(controller);
                    add_state = true;
                }
            }

            /* モード変更 */
            if ((controller != null) && (controller.Mode != mode))
            {
                controller.Mode = mode;
                update_state    = true;
            }

            /* イベント */
            if (add_state)
            {
                ControllerListUpdated?.Invoke();
            }
            else if (update_state)
            {
                ControllerStatusUpdated?.Invoke(controller);
            }

            return(controller);
        }