using CSScriptLib;
using Prism.Events;
using Prism.Ioc;
using Prism.Regions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows.Documents;
using System.Windows.Forms;
using TeamAAS_VP.Interfaces;
using TeamAAS_VP.Models;
namespace TeamAAS_VP.Core
{
public class ScriptHelper
{
///
/// 编译脚本
///
///
///
///
///
public static Tuple> Compile(string strSourceCode, IRegionManager regionManager, IEventAggregator ea, IContainerProvider container)
{
try
{
var eval = CSScript.Evaluator.ReferenceDomainAssemblies(DomainAssemblies.AllStatic);
IBackgroundScripting scripting = eval.LoadCode(strSourceCode);
scripting.regionManager = regionManager;
scripting.eventAggregator = ea;
scripting.container = container;
return new Tuple>(true, null);
}
catch (CSScriptLib.CompilerException e1)
{
string[] items = e1.Message.Split('\n');
List list = new List();
foreach (var item in items)
{
if (string.IsNullOrEmpty(item))
{
break;
}
list.Add(item.TrimEnd('\r'));
}
return new Tuple>(false, list);
}
catch (Exception ex)
{
List list = new List();
list.Add(ex.Message);
return new Tuple>(false, list);
}
}
///
/// 编译脚本
///
///
///
///
///
public static Task>> CompileAsync(string strSourceCode, IRegionManager regionManager, IEventAggregator ea, IContainerProvider container)
{
return Task.Run(() => {
try
{
var eval = CSScript.Evaluator.ReferenceDomainAssemblies(DomainAssemblies.AllStatic);
IBackgroundScripting scripting = eval.LoadCode(strSourceCode);
scripting.regionManager = regionManager;
scripting.eventAggregator = ea;
scripting.container = container;
return Task.FromResult>>(new Tuple>(true, null));
}
catch (CSScriptLib.CompilerException e1)
{
string[] items = e1.Message.Split('\n');
List list = new List();
foreach (var item in items)
{
if (string.IsNullOrEmpty(item))
{
break;
}
list.Add(item.TrimEnd('\r'));
}
return Task.FromResult>>(new Tuple>(false, list));
}
catch (Exception ex)
{
List list = new List();
list.Add(ex.Message);
return Task.FromResult>>(new Tuple>(false, list));
}
});
}
///
/// 执行理脚本
///
///
///
///
///
///
///
public static Task ExecuteScriptingAsync(string strSourceCode, IRegionManager regionManager, IEventAggregator ea, IContainerProvider container,Action> callback)
{
try
{
//获取
IProductService productService = container.Resolve();
var eval = CSScript.Evaluator.ReferenceDomainAssemblies(DomainAssemblies.AllStatic);
IBackgroundScripting scripting = eval.LoadCode(strSourceCode);
scripting.regionManager = regionManager;
scripting.eventAggregator = ea;
scripting.container = container;
scripting.management = container.Resolve();
scripting.CurrentProduct = productService.GetCurrentProduct();
return scripting.Execute();
}
catch (CSScriptLib.CompilerException e1)
{
List list = new List();
foreach (var item in e1.Message.Split('\n'))
{
if (string.IsNullOrEmpty(item))
{
break;
}
list.Add(item.TrimEnd('\r'));
}
callback.Invoke(new Tuple(false, list.ToArray()));
return Task.CompletedTask;
}
catch (Exception ex)
{
List list = new List();
list.Add(ex.Message);
callback.Invoke(new Tuple(false, list.ToArray()));
return Task.CompletedTask;
}
}
///
/// 执行视觉处理脚本
///
///
///
///
///
///
///
///
///
public static async Task>> ExecuteVisionScriptingAsync(string strSourceCode, IRegionManager regionManager, IEventAggregator ea, IContainerProvider container, ProcedureModel procedure, string[] items, Action> callback)
{
try
{
IProductService productService = container.Resolve();
var eval = CSScript.Evaluator.ReferenceDomainAssemblies(DomainAssemblies.AllStatic);
IVisionScripting scripting = eval.LoadCode(strSourceCode);
scripting.regionManager = regionManager;
scripting.eventAggregator = ea;
scripting.container= container;
scripting.management= container.Resolve();
scripting.CurrentProduct = productService.GetCurrentProduct();
await scripting.Execute(procedure, items, rst =>
{
callback.Invoke(rst);
});
return new Tuple>(true, null);
}
catch (CSScriptLib.CompilerException e1)
{
List list = new List();
foreach (var item in e1.Message.Split('\n'))
{
if (string.IsNullOrEmpty(item))
{
break;
}
list.Add(item.TrimEnd('\r'));
}
return new Tuple>(false, list);
}
catch (Exception ex)
{
List list = new List();
list.Add(ex.Message);
return new Tuple>(false, list);
}
}
///
/// 编译视觉处理脚本
///
///
///
///
///
///
///
///
///
public static Task>> CompileVisionScriptingAsync(string strSourceCode, IRegionManager regionManager, IEventAggregator ea, IContainerProvider container, ProcedureModel procedure, string[] items, Action> callback)
{
return Task.Run(async () =>
{
try
{
var eval = CSScript.Evaluator.ReferenceDomainAssemblies(DomainAssemblies.AllStatic);
IVisionScripting scripting = eval.LoadCode(strSourceCode);
scripting.regionManager = regionManager;
scripting.eventAggregator = ea;
scripting.container = container;
return new Tuple>(true, null);
}
catch (CSScriptLib.CompilerException e1)
{
List list = new List();
foreach (var item in e1.Message.Split('\n'))
{
if (string.IsNullOrEmpty(item))
{
break;
}
list.Add(item.TrimEnd('\r'));
}
return new Tuple>(false, list);
}
catch (Exception ex)
{
List list = new List();
list.Add(ex.Message);
return new Tuple>(false, list);
}
});
}
}
}