Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        /// <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());
        }
Exemplo n.º 3
0
 public override async Task OnRead(DumpRuntimeIntent.TaskLists tasks)
 {
     if (ReloadedList.Contains(this))
     {
         ReloadedList.Remove(this);
         await ReadTexture();
     }
 }
Exemplo n.º 4
0
 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));
 }
Exemplo n.º 5
0
 public override Task OnRead(DumpRuntimeIntent.TaskLists tasks)
 {
     return(Effect.Initialize());
 }
Exemplo n.º 6
0
 /// <summary>
 /// 从转储文件读取该值后的额外工作
 /// </summary>
 /// <param name="tasks">转储管理器等待任务列表</param>
 /// <returns></returns>
 public virtual Task OnRead(DumpRuntimeIntent.TaskLists tasks)
 {
     return(Task.CompletedTask);
 }