private void SetLeases()
        {
            _clientSponsor?.Close();
            _clientSponsor = new ClientSponsor(TimeSpan.MaxValue);
            _clientSponsor.Register((MarshalByRefObject)_missionPlannerInterfaces.CurrentState);
            //_clientSponsor.Register((MarshalByRefObject) _missionPlannerInterfaces.FlightComms);
            _clientSponsor.Register((MarshalByRefObject)_missionPlannerInterfaces.MissionPlanner);

            var lease = (ILease)_clientSponsor.InitializeLifetimeService();

            _clientSponsor.Renewal(lease);
        }
Пример #2
0
        public void BuildDocument()
        {
            var sponsor = new ClientSponsor();

            if (_listener != null)
            {
                Logger.LogLevelThreshold = _logLevel;
                Logger.RegisterListener(_listener);
                sponsor.Register(_listener);
            }
            try
            {
                try
                {
                    BuildDocument(_config, _manager, _baseDirectory, _outputDirectory, _pluginDirectory);
                }
                catch (Exception e) when(e is DocfxException || e is DocumentException)
                {
                    throw new DocfxException(e.Message);
                }
                catch (Exception e)
                {
                    throw new DocfxException(e.ToString());
                }
            }
            finally
            {
                sponsor.Close();
            }
        }
Пример #3
0
        public void BuildDocument()
        {
            var sponsor = new ClientSponsor();

            if (_listener != null)
            {
                Logger.LogLevelThreshold = _logLevel;
                Logger.RegisterListener(_listener);
                sponsor.Register(_listener);
            }
            try
            {
                try
                {
                    BuildDocument(_config, _manager, _baseDirectory, _outputDirectory, _pluginDirectory);
                }
                catch (Exception e)
                {
                    // For non-serializable exception, wrap it and throw docfx exception instead
                    throw new DocfxException(e.ToString());
                }
            }
            finally
            {
                sponsor.Close();
            }
        }
Пример #4
0
        public static void Sponsor(ServerObject obj)
        {
            ClientSponsor sponsor = new ClientSponsor();

            sponsor.RenewalTime = TimeSpan.FromMinutes(2);
            sponsor.Register(obj);
        }
Пример #5
0
        static void Main()
        {
            // Register a channel.
            TcpChannel myChannel = new TcpChannel();

            ChannelServices.RegisterChannel(myChannel);
            RemotingConfiguration.RegisterActivatedClientType(
                typeof(HelloService), "tcp://localhost:8085/");

            // Get the remote object.
            HelloService myService = new HelloService();

            // Get a sponsor for renewal of time.
            ClientSponsor mySponsor = new ClientSponsor();

            // Register the service with sponsor.
            mySponsor.Register(myService);

            // Set renewaltime.
            mySponsor.RenewalTime = TimeSpan.FromMinutes(2);

            // Renew the lease.
            ILease   myLease = (ILease)mySponsor.InitializeLifetimeService();
            TimeSpan myTime  = mySponsor.Renewal(myLease);

            Console.WriteLine("Renewed time in minutes is " + myTime.Minutes.ToString());

            // Call the remote method.
            Console.WriteLine(myService.HelloMethod("World"));

            // Unregister the channel.
            mySponsor.Unregister(myService);
            mySponsor.Close();
        }
Пример #6
0
        public void SetUp()
        {
            tempDir = new DirectoryInfo(Path.Combine(Path.GetTempPath(), "protobuf-net-gh24-" + Convert.ToBase64String(BitConverter.GetBytes(DateTime.UtcNow.Ticks)).Replace('/', '-').Substring(0, 11)));
            tempDir.Create();

            var subdir = tempDir.CreateSubdirectory("temp");

            assemblyPath = new FileInfo(Path.Combine(subdir.FullName, ASSEMBLY_NAME + ".dll"));
            CopyAssembly(assemblyPath);

            var setup = new AppDomainSetup
            {
                ApplicationBase = tempDir.FullName,
                // setting this to true allows both tests to pass
                DisallowApplicationBaseProbing = false
            };

            domain = AppDomain.CreateDomain("Gh24", null, setup);

            sponsor = new ClientSponsor();

            remoteSide = (RemoteSide)domain.CreateInstanceFromAndUnwrap(typeof(RemoteSide).Assembly.Location, typeof(RemoteSide).FullName);
            sponsor.Register(remoteSide);

            var references    = new[] { typeof(Serializer).Assembly };
            var assemblyPaths = references.ToDictionary(a => a.GetName(), a => a.Location);

            assemblyPaths[new AssemblyName(ASSEMBLY_NAME)] = assemblyPath.FullName;
            remoteSide.Initialize(assemblyPaths);
        }
        //--//

        protected void RegisterRemoteObject(ServerRemoteObject mbr)
        {
            UnregisterRemoteObject();

            m_mbr     = mbr;
            m_sponsor = new ClientSponsor();
            m_sponsor.Register(mbr);
        }
        internal TBase CreateLoaderInstance <TBase>(TypeMoniker type) where TBase : IExtensionObject
        {
            if (_domain == null)
            {
                return((TBase)Activator.CreateInstance(Type.GetType(type.AssemblyQualifiedName)));
            }

            var rvl = (TBase)_domain.CreateInstanceAndUnwrap(type.AssemblyName, type.FullName);

            _clientSponsor.Register((MarshalByRefObject)(object)rvl);
            return(rvl);
        }
Пример #9
0
        /// <summary>
        /// 通过ClientSponsor来延长远程对象生命周期
        /// </summary>
        /// <param name="counter"></param>
        /// <returns></returns>
        static ISponsor ExtendLifetimeViaSponsor(object counter)
        {
            CounterService counterService = counter as CounterService;

            ILease lease = RemotingServices.GetLifetimeService(counterService) as ILease;

            //为Lease注册一个Sposnor,并把Renew时间设为4s
            ClientSponsor clientSponsor = new ClientSponsor(TimeSpan.FromSeconds(4));

            clientSponsor.Register(counterService);

            return(clientSponsor);
        }
Пример #10
0
        public static ICollection GetToolboxItems(AssemblyName an, bool throwOnError)
        {
            if (_domainObject == null)
            {
                _domain              = AppDomain.CreateDomain("Assembly Enumeration Domain");
                _domainObject        = (DomainProxyObject)_domain.CreateInstanceAndUnwrap(typeof(DomainProxyObject).Assembly.FullName, typeof(DomainProxyObject).FullName);
                _domainObjectSponsor = new ClientSponsor(new TimeSpan(0, 5, 0));
                _domainObjectSponsor.Register(_domainObject);
            }
            byte[]          toolboxItems = _domainObject.GetToolboxItems(an, throwOnError);
            BinaryFormatter formatter    = new BinaryFormatter();

            return((ICollection)formatter.Deserialize(new MemoryStream(toolboxItems)));
        }
Пример #11
0
        public static async Task Run(Action <RemoteTaskCompletionSource, ISponsor> action, CancellationToken token)
        {
            var sponsor = new ClientSponsor();

            try {
                var taskHandle = new RemoteTaskCompletionSource(token);
                sponsor.Register(taskHandle);

                action(taskHandle, sponsor);
                await taskHandle.Task;
            }
            finally {
                sponsor.Close();
            }
        }
Пример #12
0
        public void BuildDocument()
        {
            var sponsor = new ClientSponsor();

            EnvironmentContext.SetBaseDirectory(_baseDirectory);
            EnvironmentContext.SetGitFeaturesDisabled(_disableGitFeatures);
            EnvironmentContext.SetVersion(_version);
            if (_listener != null)
            {
                Logger.LogLevelThreshold = _logLevel;
                Logger.RegisterListener(_listener);
                sponsor.Register(_listener);
            }
            try
            {
                try
                {
                    BuildDocument(_config, _manager, _baseDirectory, _outputDirectory, _pluginDirectory, _templateDirectory);
                }
                catch (AggregateException agg) when(agg.InnerException is DocfxException)
                {
                    throw new DocfxException(agg.InnerException.Message);
                }
                catch (AggregateException agg) when(agg.InnerException is DocumentException)
                {
                    throw new DocumentException(agg.InnerException.Message);
                }
                catch (DocfxException e)
                {
                    throw new DocfxException(e.Message);
                }
                catch (DocumentException)
                {
                    throw;
                }
                catch (Exception e)
                {
                    throw new DocfxException(e.ToString());
                }
            }
            finally
            {
                sponsor.Close();
            }
        }
Пример #13
0
        /// <summary>Recycles the application domain by killing the current one and creating a new one.</summary>
        private void RecycleAppDomain()
        {
            if (appDomain != null)
            {
                var oldDomain = appDomain;
                try { Task.Run(() => AppDomain.Unload(oldDomain)); }
                catch { }
            }

            appDomain = AppDomain.CreateDomain("razorDomain", null, adSetup, permissionSet);

            ObjectHandle handle = Activator.CreateInstanceFrom(appDomain, typeof(RazorTemplater).Assembly.ManifestModule.FullyQualifiedName, typeof(RazorTemplater).FullName,
                                                               false, BindingFlags.CreateInstance, null, new object[] { templateNamespace, SAFE_GUARD }, null, null);

            templater = (RazorTemplater)handle.Unwrap();

            clientSponsor.Register(templater);
        }
Пример #14
0
        protected DomainAgentSessionHostBase(IServerSession sessionBase, ServerAgent agent, CancellationToken token)
        {
            this.agent = agent;
            this.Token = token;

            Tasks = new TaskRunnerManager();

            SessionClient = new DomainAgentSessionClient();
            SessionClient.OnSessionBegin   += SessionClient_OnSessionBegin;
            SessionClient.OnSessionRelease += SessionClient_OnSessionRelease;
            SessionClient.OnSessionRunTask += SessionClient_OnSessionRunTask;

            sponsor = new ClientSponsor();
            sponsor.Register(SessionClient);

            MessageClient = new MessageClient(PhotonServer.Instance.MessageRegistry);
            MessageClient.Transceiver.Context = sessionBase;

            MessageClient.ThreadException += MessageClient_OnThreadException;
        }
Пример #15
0
        public void Initialize(string assemblyFilename)
        {
            var assemblyName = Path.GetFileName(assemblyFilename);
            var assemblyPath = Path.GetDirectoryName(assemblyFilename);

            if (string.IsNullOrEmpty(assemblyName))
                throw new ApplicationException("Assembly filename is empty!");

            var domainSetup = new AppDomainSetup {
                ApplicationBase = assemblyPath,
                ConfigurationFile = $"{assemblyFilename}.config",
            };

            Sponsor = new ClientSponsor();
            domain = AppDomain.CreateDomain(assemblyName, null, domainSetup);

            var agentType = typeof(T);
            Agent = (T)domain.CreateInstanceAndUnwrap(agentType.Assembly.FullName, agentType.FullName);
            Agent.LoadAssembly(assemblyFilename);

            Sponsor.Register(Agent);
        }
        public void OnCompleted(Action action)
        {
            var sponsor = new ClientSponsor();

            Callback cb = null;

            cb = new Callback(() =>
            {
                try
                {
                    action();
                }
                finally
                {
                    sponsor.Unregister(cb);
                }
            });

            sponsor.Register(cb);

            OnCompletedCore(cb.Invoke);
        }
Пример #17
0
        public void Start(ZetboxConfig config)
        {
            using (Logging.Log.DebugTraceMethodCall("Start", "Starting AppDomain for Server"))
            {
                serverDomain = AppDomain.CreateDomain("ServerAppDomain",
                                                      AppDomain.CurrentDomain.Evidence,
                                                      AppDomain.CurrentDomain.SetupInformation);

                AssemblyLoader.Bootstrap(serverDomain, config);

                serverManager = (IZetboxAppDomain)serverDomain.CreateInstanceAndUnwrap(
                    "Zetbox.Server.Service",
                    "Zetbox.Server.Service.ServerManager");
                serverManager.Start(config);

                if (clientSponsor == null)
                {
                    clientSponsor             = new ClientSponsor();
                    clientSponsor.RenewalTime = TimeSpan.FromMinutes(2);
                }

                clientSponsor.Register(serverManager as MarshalByRefObject);
            }
        }