示例#1
0
        /// <summary>
        /// 创建一个写入报文任务
        /// </summary>
        /// <param name="identity">标识符</param>
        /// <param name="enableBit">占用位</param>
        /// <param name="packet">筛选器</param>
        /// <param name="context">要传递的上下文</param>
        public void Send(string identity, int enableBit, byte[] packet, object context = null)
        {
            Job4Agent job = new Job4Agent(identity, enableBit
                                          , new AgentTask(packet, null, Action_Send, context));

            Scheduler.AddJob(job);
        }
示例#2
0
        /// <summary>
        /// 创建一个读取报文任务
        /// </summary>
        /// <param name="identity">标识符</param>
        /// <param name="enableBit">占用位</param>
        /// <param name="filter">筛选器</param>
        /// <param name="context">要传递的上下文</param>
        public void Read(string identity, int enableBit, IReadFilter filter, object context = null)
        {
            Job4Agent job = new Job4Agent(identity, enableBit
                                          , new AgentTask(null, filter, Action_Read, context));

            Scheduler.AddJob(job);
        }
示例#3
0
        /// <summary>
        /// 添加自定义任务
        /// </summary>
        /// <param name="identity">标识符</param>
        /// <param name="enableBit">占用位</param>
        /// <param name="task">任务</param>
        public void AddCustomTask(String identity, int enableBit, AgentTask task)
        {
            Job4Agent job = new Job4Agent(identity, enableBit, task);

            Scheduler.AddJob(job);
        }
示例#4
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);
            }
        }