Exemple #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();
            }
        }
Exemple #2
0
        private static void Clear()
        {
            var script_list = (List <ScriptFileController>)null;

            /* 新しいリストと入れ替え */
            lock (controller_list_sync_) {
                script_list      = controller_list_;
                controller_list_ = new List <ScriptFileController>();
            }

            if (script_list.Count > 0)
            {
                var sw_timeout = new System.Diagnostics.Stopwatch();

                /* 全スクリプトに停止要求 */
                script_list.ForEach(script => script.StopAsync());

                /* 全スクリプトが停止するまで待つ */
                sw_timeout.Restart();
                while ((sw_timeout.ElapsedMilliseconds < SCRIPT_STOP_TIMEOUT) &&
                       (!script_list.TrueForAll(script => script.Status == ScriptRunStatus.Stop))
                       )
                {
                    System.Threading.Thread.Sleep(100);
                }

                /* 残っているスクリプトを完全に停止させる */
                controller_list_.ForEach(script => script.Stop());

                ControllerListUpdated?.Invoke();
            }
        }
Exemple #3
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);
        }