/// <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); }
/// <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); }
/// <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); }
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); } }