/// <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); }
/// <summary> /// 将脚本运行环境转储为二进制数组 /// </summary> /// <returns></returns> public static async Task <byte[]> Dump(ScriptRuntime runtime) { var intent = DumpRuntimeIntent.CreateEmpty(); intent.runtime = runtime; intent = (await MessageService.ProcessAsync <DumpRuntimeIntent>(Message <DumpRuntimeIntent> .Create(CoreConstant.Mask, CoreConstant.DumpRuntime, intent))).Content; var tasks = new DumpRuntimeIntent.TaskLists(); while (runtime != null) { foreach (var value in runtime.MemoryStack) { tasks.OnDump(value); } foreach (var(_, value) in runtime.Exported) { tasks.OnDump(value); } if (runtime.ActiveScope != null) { tasks.OnDump(runtime.ActiveScope); } runtime = runtime.LoadingTarget; } await tasks.WaitAll(); var serializer = new BinaryFormatter(); var stream = new MemoryStream(); serializer.Serialize(stream, intent); return(stream.ToArray()); }
public override async Task OnRead(DumpRuntimeIntent.TaskLists tasks) { if (ReloadedList.Contains(this)) { ReloadedList.Remove(this); await ReadTexture(); } }
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)); }
public override Task OnRead(DumpRuntimeIntent.TaskLists tasks) { return(Effect.Initialize()); }
/// <summary> /// 从转储文件读取该值后的额外工作 /// </summary> /// <param name="tasks">转储管理器等待任务列表</param> /// <returns></returns> public virtual Task OnRead(DumpRuntimeIntent.TaskLists tasks) { return(Task.CompletedTask); }