예제 #1
0
 void device_ResultGot4Custom(AgentTaskResult result)
 {
     if (!Got && result.Context.Equals(this))
     {
         Got = true;
         this.Device.ResultGot4Custom -= device_ResultGot4Custom;
         ResultGotHandler(result);
         result.Context = null;
         waitHandle.Set();
     }
 }
예제 #2
0
        protected void ExecueJob(Job4Agent job)
        {
            var result = new AgentTaskResult(job.Identity);

            result.Action = job.Content.Action;
            try
            {
                switch (job.Content.Action)
                {
                case "Send":
                    this.IOAgent.Send(job.Content.SendPacket);
                    result.Successed = true;
                    break;

                case "Read":
                    result.ExecuteResult = this.IOAgent.Read(job.Content.ReadFilter, 0x00);
                    result.Successed     = true;
                    break;

                case "SendAndRead":
                    result.ExecuteResult = this.IOAgent.SendAndRead(job.Content.SendPacket, job.Content.ReadFilter);
                    result.Successed     = true;
                    break;

                default:
                    if (CustomActionExecute != null)
                    {
                        CustomActionContext caContext = new CustomActionContext();
                        caContext.Agent      = this;
                        caContext.IO         = this.IOAgent;
                        caContext.Job        = job;
                        result.ExecuteResult = CustomActionExecute(caContext);
                        result.Successed     = true;
                    }
                    else
                    {
                        result.Exception = new ArgumentException("未能识别的Action");
                        result.Successed = false;
                    }
                    break;
                }
            }
            catch (Exception e)
            {
                System.Diagnostics.Debug.Write("Exception Catch On AgentAsync.ExecueJob");
                System.Diagnostics.Debug.WriteLine(String.Format("{0}:{1}", e.GetType(), e.Message));
                System.Diagnostics.Debug.WriteLine(e.StackTrace);
                result.Exception = e;
                result.Successed = false;
            }
            result.Context = job.Content.Context;
            if (Scheduler.ScheduleState != ScheduleStates.Running)
            {
                return;
            }
            ResultGot(result);
            if (EnableResultQueue)
            {
                ResultQueue.Enqueue(result);
            }
        }
예제 #3
0
 /// <summary>
 /// 处理任务返回
 /// </summary>
 /// <param name="result"></param>
 protected virtual void ResultGotHandler(AgentTaskResult result)
 {
 }