Exemplo n.º 1
0
 protected override void Execute(List <GameEntity> entities)
 {
     foreach (var entity in entities)
     {
         var request = new RequestLoadAssembly(entity.assemblyBytes.Value);
         LogManager.GetCurrentClassLogger().Info($"Load assembly started... Entity: {entity}");
         request.OnFinish += response =>
         {
             ResponseLoadAssembly responseLoadAssembly = (ResponseLoadAssembly)response;
             Type compiledType = responseLoadAssembly.CompiledType;
             entity.ReplaceType(compiledType);
             LogManager.GetCurrentClassLogger()
             .Info(
                 $"<Color=Green><b>Loading assembly successful! Time = {responseLoadAssembly.Milliseconds} ms.</b></Color>");
         };
         request.OnError += s =>
         {
             //entity.ReplaceType(null);
         };
     }
 }
Exemplo n.º 2
0
        private IEnumerator Get()
        {
            Assembly assembly = null;
            Type     type     = null;

            byte[] bytes = (byte[])UserData[0];
            bool   done  = false;

            DateTime start        = DateTime.Now;
            int      milliseconds = 0;

            string errorMessage = null;

            if (bytes == null)
            {
                VRErrorManager.Instance.Show(ErrorHelper.GetErrorDescByCode(Varwin.Errors.ErrorCode.CompileCodeError));

                var response = new ResponseLoadAssembly()
                {
                    LoadedAssembly = null,
                    CompiledType   = null,
                    Milliseconds   = milliseconds
                };
                ((IRequest)this).OnResponseDone(response);
            }
            else
            {
                new Thread(() =>
                {
                    try
                    {
                        assembly     = Assembly.Load(bytes);
                        type         = assembly.ExportedTypes.FirstOrDefault();
                        milliseconds = (DateTime.Now - start).Milliseconds;
                    }
                    catch (Exception e)
                    {
                        errorMessage = e.Message;
                    }
                    finally
                    {
                        done = true;
                    }
                }).Start();

                while (!done)
                {
                    yield return(null);
                }

                if (!string.IsNullOrEmpty(errorMessage))
                {
                    VRErrorManager.Instance.Show(ErrorHelper.GetErrorDescByCode(Varwin.Errors.ErrorCode.RuntimeCodeError));
                }

                if (type == null && !string.IsNullOrEmpty(errorMessage))
                {
                    ((IRequest)this).OnResponseError($"Runtime code error! {errorMessage}");
                    AMQPClient.SendRuntimeErrorMessage(ProjectData.SceneId, 0, 0, errorMessage);
                }
                else
                {
                    var response = new ResponseLoadAssembly()
                    {
                        LoadedAssembly = assembly,
                        CompiledType   = type,
                        Milliseconds   = milliseconds
                    };
                    ((IRequest)this).OnResponseDone(response);
                }
            }
            yield return(true);
        }