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