using System.Threading.Tasks; using Abp.Dependency; using Abp.Runtime.Caching; using IwbZero.ToolCommon.StringModel; using WeEngine.Enum; using WeEngine.Message; using WeEngine.Packages; using WeEngine.Strategy.Eval; using WeEngine.Strategy.Runner; namespace WeEngine { public class PackageRunner : ISingletonDependency { public PackageRunner(IocManager iocManager, ICacheManager cacheManager, IMessageSender weMessageSender) { IocManager = iocManager; CacheManager = cacheManager; WeMessageSender = weMessageSender; } private ICacheManager CacheManager { get; } private IocManager IocManager { get; } private IMessageSender WeMessageSender { get; } /// /// 根据运行编号操作 /// /// /// /// public bool Run(string runningId, OperationType operationType) { var package = (PackageNode)CacheManager.GetCache(EngineCacheName.RunningPackage).GetOrDefault(runningId); return Run(package, operationType); } /// /// 运行方案包 /// /// /// /// public bool Run(PackageNode package, OperationType operationType) { if (!package.ModuleHasLoad) { var modeType = package.EngineType.IsEmpty() ? "Evolution" : package.EngineType; var runner = IocManager.IocContainer.Resolve($"{modeType}Runner"); var eval = IocManager.IocContainer.Resolve($"{modeType}Eval"); runner.Instance.PackageInfo = package; package.RunnerManager = runner; package.EvalManager = eval; package.MessageSender = WeMessageSender; } bool flag; using (Task t = new Task(() => package.RunnerManager.Instance.Run(package, operationType), TaskCreationOptions.LongRunning)) { t.Start(); flag = t.Result; } //var flag= package.RunnerManager.Instance.Run(package, operationType); CacheManager.GetCache(EngineCacheName.RunningPackage).Set(package.RunningId, package); return flag; } /// /// 运行方案包 /// /// /// public void ReRun(PackageNode package) { if (!package.ModuleHasLoad) { var modeType = package.EngineType.IsEmpty() ? "Evolution" : package.EngineType; var runner = IocManager.IocContainer.Resolve($"{modeType}Runner"); var eval = IocManager.IocContainer.Resolve($"{modeType}Eval"); runner.Instance.PackageInfo = package; package.RunnerManager = runner; package.EvalManager = eval; package.MessageSender = WeMessageSender; } CacheManager.GetCache(EngineCacheName.RunningPackage).Set(package.RunningId, package); } } }