Ejemplo n.º 1
0
        public NetMQRequestServer(INetMQServerConfiguration configuration)
        {
            _responseSocket = new ResponseSocket();
            _responseSocket.Bind($"tcp://localhost:{configuration.Port}");

            // ReSharper disable once ConvertClosureToMethodGroup
            _task = Task.Run(() => Listen());
        }
        public HandleRequestObserver(IQueueManager queueManager, INetMQServerConfiguration configuration)
        {
            Guard.AgainstNull(queueManager, nameof(queueManager));
            Guard.AgainstNull(configuration, nameof(configuration));

            _queueManager  = queueManager;
            _configuration = configuration;
        }
        public static Type GetSerializerType(this INetMQServerConfiguration configuration)
        {
            Guard.AgainstNull(configuration, nameof(configuration));

            if (string.IsNullOrWhiteSpace(configuration.SerializerType))
            {
                return(typeof(DefaultSerializer));
            }

            try
            {
                return(Type.GetType(configuration.SerializerType));
            }
            catch
            {
                throw new ConfigurationErrorsException(string.Format(NetMQ.Resources.UnknownSerializerType, configuration.SerializerType));
            }
        }
Ejemplo n.º 4
0
        public static NinjectComponentContainer Create(IKernel kernel, INetMQServerConfiguration configuration)
        {
            Guard.AgainstNull(kernel, nameof(kernel));
            Guard.AgainstNull(configuration, nameof(configuration));

            var container = new NinjectComponentContainer(kernel);

            container.RegisterInstance(configuration);
            container.Register(typeof(ISerializer), configuration.GetSerializerType());
            container.Register <IPipelineFactory, DefaultPipelineFactory>();
            container.Register <INetMQRequestClientProvider, NetMQRequestClientProvider>();
            container.Register <INetMQRequestServer, NetMQRequestServer>();
            container.Register <IUriResolver, DefaultUriResolver>();
            container.Register <IQueueManager, QueueManager>();
            container.Register <INetMQServer, NetMQServer>();

            var reflectionService = new ReflectionService();

            foreach (var type in reflectionService.GetTypesAssignableTo <IPipeline>())
            {
                if (type.IsInterface || type.IsAbstract || container.IsRegistered(type))
                {
                    continue;
                }

                container.Register(type, type, Lifestyle.Transient);
            }

            foreach (var type in reflectionService.GetTypesAssignableTo <IPipelineObserver>())
            {
                if (type.IsInterface || type.IsAbstract)
                {
                    continue;
                }

                var interfaceType = type.InterfaceMatching($"I{type.Name}");

                if (interfaceType != null)
                {
                    if (container.IsRegistered(type))
                    {
                        continue;
                    }

                    container.Register(interfaceType, type, Lifestyle.Singleton);
                }
            }

            var queueFactoryType = typeof(IQueueFactory);
            var queueFactoryImplementationTypes = new HashSet <Type>();

            void AddQueueFactoryImplementationType(Type type)
            {
                queueFactoryImplementationTypes.Add(type);
            }

            if (configuration.ScanForQueueFactories)
            {
                foreach (var type in new ReflectionService().GetTypesAssignableTo <IQueueFactory>())
                {
                    AddQueueFactoryImplementationType(type);
                }
            }

            foreach (var type in configuration.QueueFactoryTypes)
            {
                AddQueueFactoryImplementationType(type);
            }

            container.RegisterCollection(queueFactoryType, queueFactoryImplementationTypes, Lifestyle.Singleton);

            var queueManager   = container.Resolve <IQueueManager>();
            var queueFactories = container.ResolveAll <IQueueFactory>();

            foreach (var queueFactory in queueFactories)
            {
                queueManager.RegisterQueueFactory(queueFactory);
            }

            return(container);
        }