using System; using Polly; using System.Threading; using SHJX.Service.Common.Extend; using SHJX.Service.Model.Control; using SHJX.Service.Control.Modules; using SHJX.Service.Control.Interface; using SHJX.Service.Common.UserDelegate; using SHJX.Service.Common.ReadXML; namespace SHJX.Service.Control.Route.RouteController { public class ManiOperate : FlowControlOperateImp { private const string OpName = "Mani"; public virtual bool Operate(ReadConfigUtil config, DataEventArgs data) { var res = false; var portArgs = new PortArgs { TypeName = OpName }; switch (data.Task.RouteStep) { case "Mani_Loosen": if ( DataCentre.GetConfig.ManiGrabFeedBack) { var judgeValue = 0; Policy.HandleResult(Arg => Arg.Equals(false)).Retry(3, (resultArg, retryCount) => { #region 松开 portArgs.WriteWay = WriteWay.Normotopia; res = data.Client.Factory(OpName).Write(portArgs); #endregion #region 抓取 portArgs.WriteWay = WriteWay.Antiposition; res = res && data.Client.Factory(OpName).Write(portArgs); #endregion judgeValue = retryCount; }).Execute(() => { portArgs.ReadWay = "Judge"; var judgeRes = Convert.ToBoolean(data.Client.Factory(OpName).Read(portArgs)); #region 任务取消,加入取消缓存 if (judgeValue.Equals(3) && !judgeRes) { portArgs.WriteWay = WriteWay.Normotopia; res = data.Client.Factory(OpName).Write(portArgs); Messager.Send("getCupError", data.Task); } #endregion res = judgeRes; return judgeRes; }); } portArgs.WriteWay = WriteWay.Normotopia;//松开 res = data.Client.Factory(OpName).Write(portArgs); break; case "Mani_Grab": portArgs.WriteWay = WriteWay.Antiposition; res = data.Client.Factory(OpName).Write(portArgs); if ( DataCentre.GetConfig.ManiGrabFeedBack) { var judgeValue = 0; Policy.HandleResult(Arg => Arg.Equals(false)).Retry(3, (resultArg, retryCount) => { #region 松开 portArgs.WriteWay = WriteWay.Normotopia; res = data.Client.Factory(OpName).Write(portArgs); #endregion #region 抓取 portArgs.WriteWay = WriteWay.Antiposition; res = res && data.Client.Factory(OpName).Write(portArgs); #endregion judgeValue = retryCount; }).Execute(() => { portArgs.ReadWay = "Judge"; var judgeRes = Convert.ToBoolean(data.Client.Factory(OpName).Read(portArgs)); #region 任务取消,加入取消缓存 if (judgeValue.Equals(3) && !judgeRes) { portArgs.WriteWay = WriteWay.Normotopia; res = data.Client.Factory(OpName).Write(portArgs); //CancelCache.Set(data.Task.OriginLocalName, "Cancel"); //data.DataManager.Delete(data.Task); Messager.Send("getCupError", data.Task); } #endregion res = judgeRes; return judgeRes; }); } break; default: res = false; break; } Thread.Sleep(10); return res; } } }