PackageRunner.cs 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. using System.Threading.Tasks;
  2. using Abp.Dependency;
  3. using Abp.Runtime.Caching;
  4. using IwbZero.ToolCommon.StringModel;
  5. using WeEngine.Enum;
  6. using WeEngine.Message;
  7. using WeEngine.Packages;
  8. using WeEngine.Strategy.Eval;
  9. using WeEngine.Strategy.Runner;
  10. namespace WeEngine
  11. {
  12. public class PackageRunner : ISingletonDependency
  13. {
  14. public PackageRunner(IocManager iocManager, ICacheManager cacheManager, IMessageSender weMessageSender)
  15. {
  16. IocManager = iocManager;
  17. CacheManager = cacheManager;
  18. WeMessageSender = weMessageSender;
  19. }
  20. private ICacheManager CacheManager { get; }
  21. private IocManager IocManager { get; }
  22. private IMessageSender WeMessageSender { get; }
  23. /// <summary>
  24. /// 根据运行编号操作
  25. /// </summary>
  26. /// <param name="runningId"></param>
  27. /// <param name="operationType"></param>
  28. /// <returns></returns>
  29. public bool Run(string runningId, OperationType operationType)
  30. {
  31. var package = (PackageNode)CacheManager.GetCache(EngineCacheName.RunningPackage).GetOrDefault(runningId);
  32. return Run(package, operationType);
  33. }
  34. /// <summary>
  35. /// 运行方案包
  36. /// </summary>
  37. /// <param name="package"></param>
  38. /// <param name="operationType"></param>
  39. /// <returns></returns>
  40. public bool Run(PackageNode package, OperationType operationType)
  41. {
  42. if (!package.ModuleHasLoad)
  43. {
  44. var modeType = package.EngineType.IsEmpty() ? "Evolution" : package.EngineType;
  45. var runner = IocManager.IocContainer.Resolve<IRunnerManager>($"{modeType}Runner");
  46. var eval = IocManager.IocContainer.Resolve<IEvalManager>($"{modeType}Eval");
  47. runner.Instance.PackageInfo = package;
  48. package.RunnerManager = runner;
  49. package.EvalManager = eval;
  50. package.MessageSender = WeMessageSender;
  51. }
  52. bool flag;
  53. using (Task<bool> t = new Task<bool>(() => package.RunnerManager.Instance.Run(package, operationType), TaskCreationOptions.LongRunning))
  54. {
  55. t.Start();
  56. flag = t.Result;
  57. }
  58. //var flag= package.RunnerManager.Instance.Run(package, operationType);
  59. CacheManager.GetCache(EngineCacheName.RunningPackage).Set(package.RunningId, package);
  60. return flag;
  61. }
  62. /// <summary>
  63. /// 运行方案包
  64. /// </summary>
  65. /// <param name="package"></param>
  66. /// <returns></returns>
  67. public void ReRun(PackageNode package)
  68. {
  69. if (!package.ModuleHasLoad)
  70. {
  71. var modeType = package.EngineType.IsEmpty() ? "Evolution" : package.EngineType;
  72. var runner = IocManager.IocContainer.Resolve<IRunnerManager>($"{modeType}Runner");
  73. var eval = IocManager.IocContainer.Resolve<IEvalManager>($"{modeType}Eval");
  74. runner.Instance.PackageInfo = package;
  75. package.RunnerManager = runner;
  76. package.EvalManager = eval;
  77. package.MessageSender = WeMessageSender;
  78. }
  79. CacheManager.GetCache(EngineCacheName.RunningPackage).Set(package.RunningId, package);
  80. }
  81. }
  82. }