ScriptHelper.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. using CSScriptLib;
  2. using Prism.Events;
  3. using Prism.Ioc;
  4. using Prism.Regions;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Reflection;
  9. using System.Text;
  10. using System.Text.RegularExpressions;
  11. using System.Threading.Tasks;
  12. using System.Windows.Documents;
  13. using System.Windows.Forms;
  14. using TeamAAS_VP.Interfaces;
  15. using TeamAAS_VP.Models;
  16. using TeamAAS_VP.Services;
  17. namespace TeamAAS_VP.Core
  18. {
  19. public class ScriptHelper
  20. {
  21. /// <summary>
  22. /// 编译脚本
  23. /// </summary>
  24. /// <param name="strSourceCode"></param>
  25. /// <param name="MethodName"></param>
  26. /// <param name="ClassName"></param>
  27. /// <returns></returns>
  28. public static Tuple<bool,List<string>> Compile(string strSourceCode, IRegionManager regionManager, IEventAggregator ea, IContainerProvider container)
  29. {
  30. try
  31. {
  32. var eval = CSScript.Evaluator.ReferenceDomainAssemblies(DomainAssemblies.AllStatic);
  33. IBackgroundScripting scripting = eval.LoadCode<IBackgroundScripting>(strSourceCode);
  34. scripting.regionManager = regionManager;
  35. scripting.eventAggregator = ea;
  36. scripting.container = container;
  37. return new Tuple<bool, List<string>>(true, null);
  38. }
  39. catch (CSScriptLib.CompilerException e1)
  40. {
  41. string[] items = e1.Message.Split('\n');
  42. List<string> list = new List<string>();
  43. foreach (var item in items)
  44. {
  45. if (string.IsNullOrEmpty(item))
  46. {
  47. break;
  48. }
  49. list.Add(item.TrimEnd('\r'));
  50. }
  51. return new Tuple<bool, List<string>>(false, list);
  52. }
  53. catch (Exception ex)
  54. {
  55. List<string> list = new List<string>();
  56. list.Add(ex.Message);
  57. return new Tuple<bool, List<string>>(false, list);
  58. }
  59. }
  60. /// <summary>
  61. /// 编译脚本
  62. /// </summary>
  63. /// <param name="strSourceCode"></param>
  64. /// <param name="MethodName"></param>
  65. /// <param name="ClassName"></param>
  66. /// <returns></returns>
  67. public static Task<Tuple<bool, List<string>>> CompileAsync(string strSourceCode, IRegionManager regionManager, IEventAggregator ea, IContainerProvider container)
  68. {
  69. return Task.Run(() => {
  70. try
  71. {
  72. var eval = CSScript.Evaluator.ReferenceDomainAssemblies(DomainAssemblies.AllStatic);
  73. IBackgroundScripting scripting = eval.LoadCode<IBackgroundScripting>(strSourceCode);
  74. scripting.regionManager = regionManager;
  75. scripting.eventAggregator = ea;
  76. scripting.container = container;
  77. return Task.FromResult<Tuple<bool, List<string>>>(new Tuple<bool, List<string>>(true, null));
  78. }
  79. catch (CSScriptLib.CompilerException e1)
  80. {
  81. string[] items = e1.Message.Split('\n');
  82. List<string> list = new List<string>();
  83. foreach (var item in items)
  84. {
  85. if (string.IsNullOrEmpty(item))
  86. {
  87. break;
  88. }
  89. list.Add(item.TrimEnd('\r'));
  90. }
  91. return Task.FromResult<Tuple<bool, List<string>>>(new Tuple<bool, List<string>>(false, list));
  92. }
  93. catch (Exception ex)
  94. {
  95. List<string> list = new List<string>();
  96. list.Add(ex.Message);
  97. return Task.FromResult<Tuple<bool, List<string>>>(new Tuple<bool, List<string>>(false, list));
  98. }
  99. });
  100. }
  101. /// <summary>
  102. /// 执行理脚本
  103. /// </summary>
  104. /// <param name="strSourceCode"></param>
  105. /// <param name="regionManager"></param>
  106. /// <param name="ea"></param>
  107. /// <param name="container"></param>
  108. /// <param name="callback"></param>
  109. /// <returns></returns>
  110. public static Task ExecuteScriptingAsync(string strSourceCode, IRegionManager regionManager, IEventAggregator ea, IContainerProvider container,Action<Tuple<bool, string[]>> callback)
  111. {
  112. try
  113. {
  114. IProductService productService = container.Resolve<IProductService>();
  115. var eval = CSScript.Evaluator.ReferenceDomainAssemblies(DomainAssemblies.AllStatic);
  116. IBackgroundScripting scripting = eval.LoadCode<IBackgroundScripting>(strSourceCode);
  117. scripting.regionManager = regionManager;
  118. scripting.eventAggregator = ea;
  119. scripting.container = container;
  120. scripting.management = container.Resolve<Management>();
  121. scripting.CurrentProduct = productService.GetCurrentProduct();
  122. return scripting.Execute();
  123. }
  124. catch (CSScriptLib.CompilerException e1)
  125. {
  126. List<string> list = new List<string>();
  127. foreach (var item in e1.Message.Split('\n'))
  128. {
  129. if (string.IsNullOrEmpty(item))
  130. {
  131. break;
  132. }
  133. list.Add(item.TrimEnd('\r'));
  134. }
  135. callback.Invoke(new Tuple<bool, string[]>(false, list.ToArray()));
  136. return Task.CompletedTask;
  137. }
  138. catch (Exception ex)
  139. {
  140. List<string> list = new List<string>();
  141. list.Add(ex.Message);
  142. callback.Invoke(new Tuple<bool, string[]>(false, list.ToArray()));
  143. return Task.CompletedTask;
  144. }
  145. }
  146. /// <summary>
  147. /// 执行视觉处理脚本
  148. /// </summary>
  149. /// <param name="strSourceCode"></param>
  150. /// <param name="regionManager"></param>
  151. /// <param name="ea"></param>
  152. /// <param name="container"></param>
  153. /// <param name="procedure"></param>
  154. /// <param name="items"></param>
  155. /// <param name="callback"></param>
  156. /// <returns></returns>
  157. public static async Task<Tuple<bool, List<string>>> ExecuteVisionScriptingAsync(string strSourceCode, IRegionManager regionManager, IEventAggregator ea, IContainerProvider container, ProcedureModel procedure, string[] items, Action<Tuple<bool, string[]>> callback)
  158. {
  159. try
  160. {
  161. IProductService productService = container.Resolve<IProductService>();
  162. var eval = CSScript.Evaluator.ReferenceDomainAssemblies(DomainAssemblies.AllStatic);
  163. IVisionScripting scripting = eval.LoadCode<IVisionScripting>(strSourceCode);
  164. scripting.regionManager = regionManager;
  165. scripting.eventAggregator = ea;
  166. scripting.container= container;
  167. scripting.management= container.Resolve<Management>();
  168. scripting.CurrentProduct = productService.GetCurrentProduct();
  169. await scripting.Execute(procedure, items, rst =>
  170. {
  171. callback.Invoke(rst);
  172. });
  173. return new Tuple<bool, List<string>>(true, null);
  174. }
  175. catch (CSScriptLib.CompilerException e1)
  176. {
  177. List<string> list = new List<string>();
  178. foreach (var item in e1.Message.Split('\n'))
  179. {
  180. if (string.IsNullOrEmpty(item))
  181. {
  182. break;
  183. }
  184. list.Add(item.TrimEnd('\r'));
  185. }
  186. return new Tuple<bool, List<string>>(false, list);
  187. }
  188. catch (Exception ex)
  189. {
  190. List<string> list = new List<string>();
  191. list.Add(ex.Message);
  192. return new Tuple<bool, List<string>>(false, list);
  193. }
  194. }
  195. /// <summary>
  196. /// 编译视觉处理脚本
  197. /// </summary>
  198. /// <param name="strSourceCode"></param>
  199. /// <param name="regionManager"></param>
  200. /// <param name="ea"></param>
  201. /// <param name="container"></param>
  202. /// <param name="procedure"></param>
  203. /// <param name="items"></param>
  204. /// <param name="callback"></param>
  205. /// <returns></returns>
  206. public static Task<Tuple<bool, List<string>>> CompileVisionScriptingAsync(string strSourceCode, IRegionManager regionManager, IEventAggregator ea, IContainerProvider container, ProcedureModel procedure, string[] items, Action<Tuple<bool, string[]>> callback)
  207. {
  208. return Task.Run(async () =>
  209. {
  210. try
  211. {
  212. var eval = CSScript.Evaluator.ReferenceDomainAssemblies(DomainAssemblies.AllStatic);
  213. IVisionScripting scripting = eval.LoadCode<IVisionScripting>(strSourceCode);
  214. scripting.regionManager = regionManager;
  215. scripting.eventAggregator = ea;
  216. scripting.container = container;
  217. return new Tuple<bool, List<string>>(true, null);
  218. }
  219. catch (CSScriptLib.CompilerException e1)
  220. {
  221. List<string> list = new List<string>();
  222. foreach (var item in e1.Message.Split('\n'))
  223. {
  224. if (string.IsNullOrEmpty(item))
  225. {
  226. break;
  227. }
  228. list.Add(item.TrimEnd('\r'));
  229. }
  230. return new Tuple<bool, List<string>>(false, list);
  231. }
  232. catch (Exception ex)
  233. {
  234. List<string> list = new List<string>();
  235. list.Add(ex.Message);
  236. return new Tuple<bool, List<string>>(false, list);
  237. }
  238. });
  239. }
  240. }
  241. }