Beispiel #1
0
 public TaskItem(IEnumerator <RunStatus> task, Scheduler scheduler, BCTX bctx)
 {
     Debug.Assert(task != null);
     this._task     = task;
     this.Scheduler = scheduler;
     this.BContext  = bctx;
 }
Beispiel #2
0
        public bool EnqueueEvent(string evnt, BCTX bctx)
        {
            string evntBehavior = myBehaviors.getEventHandler(evnt);

            if (string.IsNullOrEmpty(evntBehavior))
            {
                return(false);
            }
            return(ActivateBehaviorTask(evntBehavior, bctx));
        }
Beispiel #3
0
 public void Calling(TaskList taskList, BCTX bctx)
 {
     if (BContext == null)
     {
         BContext = bctx;
     }
     if (BContext != null)
     {
         BContext.SetCurrentTask(this, taskList, Scheduler.active == taskList);
     }
 }
Beispiel #4
0
        public bool ActivateBehaviorTask(string name, bool waitUntilComplete, BCTX bctx)
        {
            if (!ActivateBehaviorTask_ul(name, bctx))
            {
                Console.WriteLine("** WARNING Could not activate task! " + name);
                return(false);
            }

            if (!waitUntilComplete)
            {
                return(true);
            }

            WaitUntilComplete(name);

            return(true);
        }
Beispiel #5
0
        private bool ActivateBehaviorTask_ul(string name, BCTX bctx)
        {
            // if its already running or sleeping
            string status = taskStatus(name);

            if (status == "running")
            {
                return(true);
            }
            if (status == "active")
            {
                return(true);
            }
            if (status == "sleeping")
            {
                return(AwakenTask(name));
            }
            // start up a new one
            if (!myBehaviors.definedBehavior(name))
            {
                return(false);
            }
            IEnumerator <RunStatus> iterator = myBehaviors.getBehaviorEnumerator(name, bctx);

            if (iterator == null)
            {
                // we didn't find it!
                return(false);
            }
            if ((singular == false) || (active.Count == 0))
            {
                active.Append(new TaskItem(iterator, this, name, bctx));
            }
            else
            {
                //Put in background if we are single minded
                sleeping.Append(new TaskItem(iterator, this, name, bctx));
            }
            return(true);
        }
Beispiel #6
0
        public void performAction(TextWriter writer, string action, string query, string behaviorName, BCTX bctx)
        {
            var multiBehaviorName = GatherTaskNames(behaviorName);

            if (multiBehaviorName != null)
            {
                if (multiBehaviorName.Count == 0)
                {
                    writer.WriteLine("Zero tasks or behaviors from :" + behaviorName);
                    return;
                }
                foreach (string behavorT in multiBehaviorName)
                {
                    performAction(writer, action, query, behavorT, bctx);
                }
                return;
            }
            if (action != null && action.Contains(","))
            {
                foreach (var a in action.Split(' ', ','))
                {
                    if (string.IsNullOrEmpty(a))
                    {
                        continue;
                    }
                    performAction(writer, a, query, behaviorName, bctx);
                }
            }
            string ids = "";
            string tsk = "";

            TaskList.TaskEnumerator en = null;
            switch (action)
            {
            case "info":
                ids = idStatus(behaviorName);
                tsk = taskStatus(behaviorName);
                writer.WriteLine("<status id=\"{0}\" idStatus=\"{1}\" taskStatus=\"{2}\" />", behaviorName, ids, tsk);
                bool   v01 = myBehaviors.visibleBehavior(behaviorName);
                bool   v03 = myBehaviors.definedBehavior(behaviorName);
                string eh  = myBehaviors.getEventHandler(behaviorName);
                if (!string.IsNullOrEmpty(eh) && !KeyCase.DefaultFN.SameKey(eh, behaviorName))
                {
                    writer.WriteLine("<eventHandler name=\"{0}\" value=\"{1}\">", behaviorName, eh);
                    performAction(writer, action, query, eh, bctx);
                    writer.WriteLine("</eventHandler>");
                }
                if (v03)
                {
                    var treeByTreeName = myBehaviors.GetTreeByName(behaviorName);
                    writer.WriteLine(treeByTreeName.treeDoc.OuterXml);
                }
                writer.WriteLine("<visible name=\"{0}\" value=\"{1}\"/>", behaviorName, v01);
                writer.WriteLine("<defined name=\"{0}\" value=\"{1}\"/>", behaviorName, v03);
                break;

            case "source":
                string behaviorFile    = myBehaviors.behaviorDiskName(behaviorName);
                string fileReadAllText = "";
                lock (BehaviorTree.FileLock)
                {
                    if (File.Exists(behaviorFile))
                    {
                        fileReadAllText = File.ReadAllText(behaviorFile);
                    }
                }
                writer.WriteLine("{0}", fileReadAllText);
                break;

            case "activate":
                ActivateBehaviorTask(behaviorName, bctx);
                WriteNewStatus(writer, behaviorName);
                break;

            case "deactivate":
                RemoveBehaviorTask(behaviorName);
                WriteNewStatus(writer, behaviorName);
                break;

            case "sleep":
                SleepBehaviorTask(behaviorName);
                WriteNewStatus(writer, behaviorName);
                break;

            case "sleepall":
                SleepAllTasks();
                WriteNewStatus(writer, behaviorName);
                break;

            case "reviveall":
                ReviveAllTasks();
                WriteNewStatus(writer, behaviorName);
                break;

            case "status":
                WriteNewStatus(writer, behaviorName);
                break;

            case "liststatus":
                en = sleeping.GetEnumerator();
                while (en.MoveNext())
                {
                    writer.WriteLine("<status id=\"{0}\" taskStatus=\"{1}\" />", en.Current.name, "sleeping");
                }
                en = active.GetEnumerator();
                while (en.MoveNext())
                {
                    writer.WriteLine("<status id=\"{0}\" taskStatus=\"{1}\" />", en.Current.name, "active");
                }
                break;

            case "listidstatus":
                var runState = LockInfo.CopyOf(myBehaviors.runState);
                foreach (string key in runState.Keys)
                {
                    string status = runState[key].ToString();
                    writer.WriteLine("<status id=\"{0}\" idStatus=\"{1}\" />", key, status);
                }

                break;

            case "stopall":
                en = sleeping.GetEnumerator();
                while (en.MoveNext())
                {
                    writer.WriteLine("<status id=\"{0}\" taskStatus=\"{1}\" />", en.Current.name, "terminating");
                    en.RemoveCurrent();
                }
                en = active.GetEnumerator();
                while (en.MoveNext())
                {
                    writer.WriteLine("<status id=\"{0}\" taskStatus=\"{1}\" />", en.Current.name, "terminating");
                    en.RemoveCurrent();
                }
                break;

            case "block":
                myBehaviors.makeInvisible(query);
                myBehaviors.makeInvisible(behaviorName);
                RemoveBehaviorTask(behaviorName);
                WriteNewStatus(writer, behaviorName);
                break;

            case "unblock":
                myBehaviors.makeVisible(query);
                WriteNewStatus(writer, behaviorName);
                break;

            case "unblockall":
                myBehaviors.invisiblePatterns.Clear();
                WriteNewStatus(writer, behaviorName);
                break;

            case "listblocks":
                foreach (string p in myBehaviors.invisiblePatterns.Keys)
                {
                    writer.WriteLine("<blockBehaviorPattern pattern=\"{0}\" />", p);
                }
                break;

            case "checkblock":
                bool v1 = myBehaviors.visibleBehavior(behaviorName);
                bool v2 = myBehaviors.visibleBehavior(query);
                bool v3 = myBehaviors.definedBehavior(behaviorName);
                bool v4 = myBehaviors.definedBehavior(query);
                writer.WriteLine("<visible name=\"{0}\" value=\"{1}\"/>", behaviorName, v1);
                writer.WriteLine("<visible name=\"{0}\" value=\"{1}\"/>", query, v2);
                writer.WriteLine("<defined name=\"{0}\" value=\"{1}\"/>", behaviorName, v3);
                writer.WriteLine("<defined name=\"{0}\" value=\"{1}\"/>", query, v4);
                break;

            case "blockcron":
                bctx.blockCron = true;
                break;

            case "unblockcron":
                bctx.blockCron = false;
                break;


            default:
                writer.WriteLine("<error action=\"{0}\" query=\"{1}\" behaviorName=\"{2}\" />", action, query,
                                 behaviorName);

                break;
            }
            writer.WriteLine("<fin/>");
            writer.Close();
        }
Beispiel #7
0
 public void AddTask(IEnumerator <RunStatus> task, BCTX bctx)
 {
     active.Append(new TaskItem(task, this, bctx));
 }
Beispiel #8
0
 public bool ActivateBehaviorTask(string name, BCTX bctx)
 {
     return(ActivateBehaviorTask(name, false, bctx));
 }