/// <summary> /// 将二进制数组转换为脚本运行环境 /// </summary> /// <param name="data">原始数据</param> /// <returns></returns> public static async Task <DumpRuntimeIntent> Read(byte[] data) { var deserializer = new BinaryFormatter(); var intent = (DumpRuntimeIntent)deserializer.Deserialize(new MemoryStream(data)); var tasks = new DumpRuntimeIntent.TaskLists(); var runtime = intent.runtime; while (runtime != null) { foreach (var value in runtime.MemoryStack) { tasks.OnRead(value); } foreach (var(_, value) in runtime.Exported) { tasks.OnRead(value); } if (runtime.ActiveScope != null) { tasks.OnRead(runtime.ActiveScope); } runtime = runtime.LoadingTarget; } await tasks.WaitAll(); await MessageService.ProcessAsync(Message <DumpRuntimeIntent> .Create(CoreConstant.Mask, CoreConstant.DumpRuntime, intent)); return(intent); }
public override Task OnRead(DumpRuntimeIntent.TaskLists tasks) { foreach (var(_, value) in LocalVariables) { tasks.OnRead(value); } if (parentScope != null) { tasks.OnRead(parentScope); } return(base.OnRead(tasks)); }