Esempio n. 1
0
        public static IDomain Create(string name, Reactor.Action callback)
        {
            var setup = new AppDomainSetup()
            {
                ApplicationBase    = AppDomain.CurrentDomain.SetupInformation.ApplicationBase,

                ConfigurationFile  = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile,

                ApplicationName    = AppDomain.CurrentDomain.SetupInformation.ApplicationName,

                LoaderOptimization = LoaderOptimization.MultiDomainHost
            };

            var appdomain = AppDomain.CreateDomain(name, null, setup);

            var domain    = (Domain)appdomain.CreateInstanceAndUnwrap(

                typeof(Domain).Assembly.FullName,

                typeof(Domain).FullName);

            domain.Start(appdomain, callback);

            return domain;
        }
Esempio n. 2
0
 public static void Post(Reactor.Action action)
 {
     Reactor.Context.Instance.Post(action);
 }
Esempio n. 3
0
        /// <summary>
        /// (experimental) Protects this object against GC collection for a set period of time.
        /// </summary>
        /// <param name="obj">The object to pin.</param>
        /// <param name="timeout">The timeout (in milliseconds) in which this object should be pinned.</param>
        /// <param name="callback">The callback triggered when the timeout completes.</param>
        public static void Pin(object obj, int timeout, Reactor.Action callback)
        {
            var instance = GC.Instance;

            instance.PinObject(obj);

            Reactor.Timeout.Create(() =>
            {
                instance.UnPinObject(obj);

                callback();

            }, timeout);
        }
Esempio n. 4
0
        private void Start(AppDomain domain, Reactor.Action callback)
        {
            this.domain = domain;

            Reactor.Loop.Start();

            Reactor.Loop.Post(callback);
        }
Esempio n. 5
0
 public static IDomain Create(Reactor.Action callback)
 {
     return Domain.Create(Guid.NewGuid().ToString(), callback);
 }
Esempio n. 6
0
 public void Post(Reactor.Action message)
 {
     this.actions.Enqueue(message);
 }