Beispiel #1
0
        /// <summary>
        /// Invoke this method upon start.
        /// </summary>
        /// <param name="args"></param>
        public void OnStart(string[] args)
        {
            Contract.Requires<ArgumentNullException>(args != null);

            var sect = RnetServiceConfigurationSection.GetDefaultSection();
            if (sect == null)
                throw new ConfigurationErrorsException("Rnet.Service configuration not found.");

            // spawn each host
            foreach (var conf in sect.Hosts)
            {
                // expose new bus on a new host with new container
                var container = new CompositionContainer(catalog);
                var context = new AsyncContextThread();
                var bus = new RnetBus(conf.Bus);
                var host = new RnetHost(bus, conf.Uri, container);
                instances.Add(new Instance(container, context, bus, host));

                // schedule initialization
                context.Factory.Run(async () =>
                {
                    await bus.Start();
                    await host.StartAsync();
                }).Wait();
            }
        }
Beispiel #2
0
 /// <summary>
 /// Initializes a new instance.
 /// </summary>
 /// <param name="bus"></param>
 /// <param name="baseUri"></param>
 /// <param name="exports"></param>
 public RnetHost(RnetBus bus, Uri baseUri, CompositionContainer exports)
     : this(bus, baseUri.ToString(), exports)
 {
     Contract.Requires<ArgumentNullException>(bus != null);
     Contract.Requires<ArgumentNullException>(baseUri != null);
     Contract.Requires<ArgumentNullException>(exports != null);
     Contract.Requires<ArgumentException>(baseUri.ToString().EndsWith("/"));
 }
Beispiel #3
0
            /// <summary>
            /// Initializes a new instance.
            /// </summary>
            /// <param name="container"></param>
            /// <param name="sync"></param>
            /// <param name="bus"></param>
            /// <param name="host"></param>
            public Instance(CompositionContainer container, AsyncContextThread sync, RnetBus bus, RnetHost host)
            {
                Contract.Requires<ArgumentNullException>(container != null);
                Contract.Requires<ArgumentNullException>(sync != null);
                Contract.Requires<ArgumentNullException>(bus != null);
                Contract.Requires<ArgumentNullException>(host != null);

                Container = container;
                Context = sync;
                Bus = bus;
                Host = host;
            }
Beispiel #4
0
        /// <summary>
        /// Initializes a new instance.
        /// </summary>
        /// <param name="bus"></param>
        /// <param name="baseUri"></param>
        /// <param name="exports"></param>
        public RnetHost(RnetBus bus, string baseUri, CompositionContainer exports)
        {
            Contract.Requires<ArgumentNullException>(bus != null);
            Contract.Requires<ArgumentNullException>(baseUri != null);
            Contract.Requires<ArgumentNullException>(exports != null);
            Contract.Requires<ArgumentException>(baseUri.EndsWith("/"));

            this.bus = bus;
            this.baseUri = baseUri;
            this.container = exports;

            // export initial values
            exports.ComposeExportedValue<ICompositionService>(new CompositionService(exports));
            exports.ComposeExportedValue(this);
            exports.ComposeExportedValue(bus);
        }
Beispiel #5
0
        public RootProcessor(
            [Import] ICompositionService composition,
            [Import] RnetBus bus,
            [Import] DriverManager driverManager,
            [Import] ProfileManager profileManager,
            [ImportMany] IEnumerable<Lazy<IRequestProcessor, RequestProcessorMetadata>> requestProcessors,
            [ImportMany] IEnumerable<Lazy<IResponseProcessor, ResponseProcessorMetadata>> responseProcessors)
        {
            Contract.Requires<ArgumentNullException>(composition != null);
            Contract.Requires<ArgumentNullException>(bus != null);
            Contract.Requires<ArgumentNullException>(requestProcessors != null);
            Contract.Requires<ArgumentNullException>(responseProcessors != null);
            Contract.Requires<ArgumentNullException>(driverManager != null);
            Contract.Requires<ArgumentNullException>(profileManager != null);

            this.composition = composition;
            this.bus = bus;
            this.driverManager = driverManager;
            this.profileManager = profileManager;
            this.requestProcessors = requestProcessors;
            this.responseProcessors = responseProcessors;
        }