Esempio n. 1
0
 public RemoteCacheClient(RemoteServiceSettings settings, HttpClient httpClient = null)
 {
     _settings   = settings;
     _httpClient = httpClient ?? new HttpClient {
         BaseAddress = new Uri(settings.Uri)
     };
 }
Esempio n. 2
0
        public static void AddPublisher(this IServiceCollection services, RemoteServiceSettings publisherSettings, IOptions <NotificationServiceSettings> options, LoggerFactory loggerFactory, DiagnosticSource diagnosticSource, HttpClient httpClient)
        {
            var settings = options.Value;

            _httpClient = httpClient;
            RegisterPublisher(services, publisherSettings, options, loggerFactory, diagnosticSource, settings);
        }
Esempio n. 3
0
        /// <summary>
        /// Creates <see cref="Packet"/> that contains provided <see cref="RemoteServiceSettings"/> data.
        /// </summary>
        /// <param name="settings"><see cref="RemoteServiceSettings"/> to create <see cref="Packet"/> from.</param>
        /// <returns><see cref="Packet"/> that contains provided <see cref="RemoteServiceSettings"/> data.</returns>
        public Packet ToPacket(RemoteServiceSettings settings)
        {
            Packet p = new Packet(Opcodes);

            settings.Write(ref p);
            return(p);
        }
Esempio n. 4
0
        public StandaloneTest()
        {
            var loggerFactory = new LoggerFactory();

            loggerFactory.AddConsole();

            var services = new ServiceCollection();

            var config = new ConfigurationBuilder()
                         .SetBasePath(Directory.GetCurrentDirectory())
                         .AddJsonFile("appSettings.json").Build();

            var settings = new NotificationServiceSettings();

            config.GetSection("Notification").Bind(settings);

            _channelName = $"{settings.ApplicationName}.{settings.ServiceName}";

            var options    = Options.Create(settings);
            var diagnostic = new MyDiagnosticSource();

            var remoteSettings = new RemoteServiceSettings {
                IsLocal = true
            };

            services.AddPublisher(remoteSettings, options, loggerFactory, diagnostic);
            services.AddSubscriber(remoteSettings, options, loggerFactory, diagnostic);

            _serviceProvider = services.BuildServiceProvider();

            _publisher  = _serviceProvider.GetService <IPublisherClientService>();
            _subscriber = _serviceProvider.GetService <SubscriberClientService>();
        }
Esempio n. 5
0
        public PublisherClientServiceExtensionTestAppSettings()
        {
            var loggerFactory = new LoggerFactory();

            loggerFactory.AddConsole();

            var services = new ServiceCollection();

            var config = new ConfigurationBuilder()
                         .SetBasePath(Directory.GetCurrentDirectory())
                         .AddJsonFile("appSettings.json").Build();

            var settings = new NotificationServiceSettings();

            config.GetSection("Notification").Bind(settings);

            var publisherSettings = new RemoteServiceSettings();

            config.GetSection("Notification:Publisher").Bind(publisherSettings);

            _channelName = $"{settings.ApplicationName}.{settings.ServiceName}";

            services.AddPublisher(publisherSettings, Options.Create(settings), loggerFactory, new MyDiagnosticSource());

            _serviceProvider = services.BuildServiceProvider();
            _publisher       = _serviceProvider.GetService <LocalPublisherClientService>();
        }
        public SubscriberClientServiceExtensionTestAppSettings()
        {
            var loggerFactory = new LoggerFactory();

            loggerFactory.AddConsole();

            var config = new ConfigurationBuilder()
                         .SetBasePath(Directory.GetCurrentDirectory())
                         .AddJsonFile("appSettings.json").Build();

            var services = new ServiceCollection();

            var settings = new NotificationServiceSettings();

            config.GetSection("Notification").Bind(settings);

            _settings = Options.Create(settings);

            var subscriberSettings = new RemoteServiceSettings();

            config.GetSection("Notification:Subscriber").Bind(subscriberSettings);

            services.AddSubscriber(subscriberSettings, _settings, loggerFactory, new MyDiagnosticSource());

            _serviceProvider = services.BuildServiceProvider();
            _subscriber      = _serviceProvider.GetService <SubscriberClientService>();
        }
Esempio n. 7
0
 public RemotePublisherClientService(RemoteServiceSettings publisherSettings, HttpClient httpClient = null, string authenticationToken = "", string tokenType = "")
 {
     _publisherSettings   = publisherSettings;
     _httpClient          = httpClient;
     _authenticationToken = authenticationToken;
     _tokenType           = tokenType;
 }
Esempio n. 8
0
        public PublisherClientServiceExtensionTest()
        {
            var loggerFactory = new LoggerFactory();

            loggerFactory.AddConsole();

            var services = new ServiceCollection();

            var eventChannelRepository = new EventChannelRepository("ECommerce.Data.FileStore",
                                                                    new ConnectionOptions
            {
                Provider         = "FileDb",
                ConnectionString = new FileInfo($"data\\channel_{Guid.NewGuid()}.json").FullName
            }, loggerFactory, new MyDiagnosticSource());

            services.AddSingleton(eventChannelRepository);

            var eventSubscriptionRepository =
                new EventSubscriptionRepository(eventChannelRepository, "ECommerce.Data.FileStore",
                                                new ConnectionOptions
            {
                Provider         = "FileDb",
                ConnectionString = new FileInfo($"data\\subscription_{Guid.NewGuid()}.json").FullName
            }, loggerFactory, new MyDiagnosticSource());

            services.AddSingleton(eventSubscriptionRepository);

            var eventRepository = new EventRepository(eventChannelRepository, "ECommerce.Data.FileStore",
                                                      new ConnectionOptions
            {
                Provider         = "FileDb",
                ConnectionString = new FileInfo($"data\\event_{Guid.NewGuid()}.json").FullName
            }, loggerFactory, new MyDiagnosticSource());

            services.AddSingleton(eventRepository);

            var settings =
                Options.Create(new NotificationServiceSettings
            {
                ApplicationName       = "MyApplication",
                ServiceName           = "MyService",
                MaxLifeTimeSubscriber = 30,
                MaxLifeTimeMessage    = 30,
                IsFifo       = true,
                CallBackType = "ECommerce.Events.Clients.Tests,ECommerce.Events.Clients.Tests.MyCallBackTest"
            });

            var publisherSetting = new RemoteServiceSettings {
                IsLocal = true
            };

            services.AddPublisher(publisherSetting, settings, loggerFactory, new MyDiagnosticSource());

            _serviceProvider = services.BuildServiceProvider();
            _publisher       = _serviceProvider.GetRequiredService <LocalPublisherClientService>();

            _channelName = $"{settings.Value.ApplicationName}.{settings.Value.ServiceName}";
        }
        private static void checkService(RemoteServiceSettings settings)
        {
            ManagementScope scope = null;
            if (settings.Path != null && settings.Path.Trim().Length > 0)
            {
                ConnectionOptions options = null;
                if (settings.Username != null && settings.Username.Trim().Length > 0)
                {
                    options = new ConnectionOptions();
                    options.Username = settings.Username;
                    options.Password = settings.Password;
                    if (settings.Authority.Trim().Length > 0)
                    {
                        options.Authority = settings.Authority;
                    }
                }

                scope = new ManagementScope(settings.Path, options);
            }
            else
            {
                scope = new ManagementScope();
            }

            scope.Connect();

            ObjectQuery query = new ObjectQuery(string.Format("SELECT * FROM Win32_Service WHERE Name = '{0}'", settings.ServiceName));

            using (var searcher = new ManagementObjectSearcher(scope, query))
            {
                bool found = false;
                foreach (ManagementObject queryObj in searcher.Get())
                {
                    found = true;
                    if (settings.State.ToLower() != queryObj["State"].ToString().ToLower())
                    {
                        throw new Exception(string.Format("Service {0} was not in expected state {1}; actual state: {2}", settings.ServiceName, settings.State, queryObj["State"]));
                    }
                    else
                    {
                        Logging.TraceEvent("Service {0} was in expected state {1}", settings.ServiceName, settings.State);
                    }
                    //Logging.TraceEvent(string.Format("Caption: {0}", queryObj["Caption"]));
                    //Logging.TraceEvent(string.Format("Description: {0}", queryObj["Description"]));
                    //Logging.TraceEvent(string.Format("Name: {0}", queryObj["Name"]));
                    //Logging.TraceEvent(string.Format("PathName: {0}", queryObj["PathName"]));
                    //Logging.TraceEvent(string.Format("State: {0}", queryObj["State"]));
                    //Logging.TraceEvent(string.Format("Status: {0}", queryObj["Status"]));
                }
                if (!found)
                {
                    Logging.TraceEvent("Unable to find service {0}", settings.ServiceName);
                    throw new Exception(string.Format("Unable to find service {0}", settings.ServiceName));
                }
            }
        }
Esempio n. 10
0
 public CacheClient(RemoteServiceSettings remoteServiceSettings, HttpClient httpClient = null)
 {
     if (remoteServiceSettings.IsLocal)
     {
         _cacheClient = new LocalCacheClient();
     }
     else
     {
         _cacheClient = new RemoteCacheClient(remoteServiceSettings, httpClient);
     }
 }
Esempio n. 11
0
        private static void RegisterPublisher(IServiceCollection services, RemoteServiceSettings publisherSettings, IOptions <NotificationServiceSettings> options, ILoggerFactory loggerFactory, DiagnosticSource diagnosticSource, NotificationServiceSettings settings)
        {
            var serviceProvider = services.BuildServiceProvider();

            if (publisherSettings.IsLocal)
            {
                RegisterLocalPublisher(services, publisherSettings, options, loggerFactory, diagnosticSource, settings, serviceProvider);
            }
            else
            {
                RegisterRemotePublisher(publisherSettings, services);
            }
        }
Esempio n. 12
0
        private static void RegisterLocalPublisher(IServiceCollection services, RemoteServiceSettings publisherSettings, IOptions <NotificationServiceSettings> options, ILoggerFactory loggerFactory, DiagnosticSource diagnosticSource, NotificationServiceSettings settings, ServiceProvider serviceProvider)
        {
            var eventChannelRepository = serviceProvider.GetService <EventChannelRepository>();

            if (eventChannelRepository == null)
            {
                eventChannelRepository = new EventChannelRepository(settings.Repository.ProviderAssembly,
                                                                    new ConnectionOptions
                {
                    Provider         = settings.Repository.ProviderType,
                    ConnectionString = settings.Repository.Channel,
                }, loggerFactory, diagnosticSource);

                services.AddSingleton(eventChannelRepository);
            }

            var eventSubscriptionRepository = serviceProvider.GetService <EventSubscriptionRepository>();

            if (eventSubscriptionRepository == null)
            {
                eventSubscriptionRepository = new EventSubscriptionRepository(eventChannelRepository,
                                                                              settings.Repository.ProviderAssembly,
                                                                              new ConnectionOptions
                {
                    Provider         = settings.Repository.ProviderType,
                    ConnectionString = settings.Repository.Subscription
                }, loggerFactory, diagnosticSource);

                services.AddSingleton(eventSubscriptionRepository);
            }

            var eventRepository = serviceProvider.GetService <EventRepository>();

            if (eventRepository == null)
            {
                eventRepository = new EventRepository(eventChannelRepository, settings.Repository.ProviderAssembly,
                                                      new ConnectionOptions
                {
                    Provider         = settings.Repository.ProviderType,
                    ConnectionString = settings.Repository.Events
                }, loggerFactory, diagnosticSource);

                services.AddSingleton(eventRepository);
            }

            var publisher = new LocalPublisherClientService(eventChannelRepository,
                                                            eventSubscriptionRepository, eventRepository,
                                                            options, loggerFactory, diagnosticSource);

            services.AddSingleton <IPublisherClientService>(publisher);
        }
Esempio n. 13
0
 /// <summary>
 /// Sets <see cref="RemoteServiceSettings"/> to specified service.
 /// </summary>
 /// <param name="settings"><see cref="RemoteServiceSettings"/> object to set as settings.</param>
 internal static void SetServiceSettings(RemoteServiceSettings settings)
 {
     if (settings != null && m_ActiveConnections.ContainsKey(settings.ServiceUniqueID))
     {
         InnerNetworkClient client = m_ActiveConnections[settings.ServiceUniqueID];
         client.RemoteServiceSettings = settings;
         client.Send
         (
             new SetSettingsResponse(SetSettingsResponse.Accepted).ToPacket()
         );
         m_ActiveConnections[settings.ServiceUniqueID] = client;
         Logger.WriteLine(Source.InnerNetwork, "{0} (0x{1}) settings update done.", client.ServiceType, client.ServiceID.ToString("x2"));
     }
 }
Esempio n. 14
0
        public static void AddPublisher(this IServiceCollection services, IConfiguration configuration, ILoggerFactory loggerFactory, DiagnosticSource diagnosticSource)
        {
            var settings = new NotificationServiceSettings();

            configuration.GetSection("Notification").Bind(settings);

            var options = Options.Create(settings);

            var publisherSettings = new RemoteServiceSettings();

            configuration.GetSection("Notification:Publisher").Bind(publisherSettings);

            RegisterPublisher(services, publisherSettings, options, loggerFactory, diagnosticSource, settings);
        }
Esempio n. 15
0
        public SubscriberTest()
        {
            var loggerFactory = new LoggerFactory();

            loggerFactory.AddConsole();

            _eventChannelRepository = new EventChannelRepository("ECommerce.Data.FileStore",
                                                                 new ConnectionOptions
            {
                Provider         = "FileDb",
                ConnectionString = new FileInfo($"data\\channel_{Guid.NewGuid()}.json").FullName
            }, loggerFactory, new MyDiagnosticSource());

            _eventSubscriptionRepository =
                new EventSubscriptionRepository(_eventChannelRepository, "ECommerce.Data.FileStore",
                                                new ConnectionOptions
            {
                Provider         = "FileDb",
                ConnectionString = new FileInfo($"data\\subscription_{Guid.NewGuid()}.json").FullName
            }, loggerFactory, new MyDiagnosticSource());

            var eventRepository = new EventRepository(_eventChannelRepository, "ECommerce.Data.FileStore",
                                                      new ConnectionOptions
            {
                Provider         = "FileDb",
                ConnectionString = new FileInfo($"data\\event_{Guid.NewGuid()}.json").FullName
            }, loggerFactory, new MyDiagnosticSource());


            _settings =
                Options.Create(new NotificationServiceSettings
            {
                ApplicationName       = "MyApplication",
                ServiceName           = "MyService",
                MaxLifeTimeSubscriber = 30,
                MaxLifeTimeMessage    = 30,
                IsFifo       = true,
                CallBackType = "ECommerce.Events.Clients.Tests,ECommerce.Events.Clients.Tests.MyCallBackTest"
            });

            var subscriberSettings = new RemoteServiceSettings {
                IsLocal = true
            };

            _subscriber = new SubscriberClientService(_eventChannelRepository,
                                                      _eventSubscriptionRepository,
                                                      eventRepository, _settings, loggerFactory, new MyDiagnosticSource());
        }
        public RemotePublisherTest()
        {
            var loggerFactory = new LoggerFactory();

            loggerFactory.AddConsole();

            var services = new ServiceCollection();

            var config = new ConfigurationBuilder()
                         .SetBasePath(Directory.GetCurrentDirectory())
                         .AddJsonFile("appSettings-RemotePublisher.json").Build();

            var settings = new NotificationServiceSettings();

            config.GetSection("Notification").Bind(settings);

            _channelName = $"{settings.ApplicationName}.{settings.ServiceName}";

            var options    = Options.Create(settings);
            var diagnostic = new MyDiagnosticSource();

            // Arrange a local subscriber

            var subscriberSettings = new RemoteServiceSettings
            {
                IsLocal = true,
                Uri     = ""
            };

            services.AddSubscriber(subscriberSettings, options, loggerFactory, diagnostic);

            // Arrange a remote publisher

            //start a publisher web site
            var testHost = new TestPublisherHost();

            services.AddPublisher(new RemoteServiceSettings
            {
                IsLocal = false, Uri = testHost.Server.BaseAddress.ToString()
            }, options, loggerFactory, diagnostic, testHost.Server.CreateClient());

            _serviceProvider = services.BuildServiceProvider();

            _subscriber = _serviceProvider.GetService <SubscriberClientService>();
            _publisher  = _serviceProvider.GetService <IPublisherClientService>();
        }
Esempio n. 17
0
        public SubscriberClientServiceExtensionTestFullSettings()
        {
            var loggerFactory = new LoggerFactory();

            loggerFactory.AddConsole();

            var services = new ServiceCollection();

            _settings =
                Options.Create(new NotificationServiceSettings
            {
                ApplicationName       = "MyApplication",
                ServiceName           = "MyService",
                MaxLifeTimeSubscriber = 30,
                MaxLifeTimeMessage    = 30,
                IsFifo       = true,
                CallBackType = "ECommerce.Events.Clients.Tests,ECommerce.Events.Clients.Tests.MyCallBackTest",
                Repository   = new RepositorySetting
                {
                    ProviderAssembly = "ECommerce.Data.FileStore",
                    ProviderType     = "FileDb",
                    Channel          = new FileInfo($"data\\channel_{Guid.NewGuid()}.json").FullName,
                    Subscription     = new FileInfo($"data\\subscription_{Guid.NewGuid()}.json").FullName,
                    Events           = new FileInfo($"data\\event_{Guid.NewGuid()}.json").FullName
                }
            });

            var subscriberSettings = new RemoteServiceSettings {
                IsLocal = true
            };

            services.AddSubscriber(subscriberSettings, _settings, loggerFactory, new MyDiagnosticSource());

            _serviceProvider = services.BuildServiceProvider();
            _subscriber      = _serviceProvider.GetService <SubscriberClientService>();
        }
Esempio n. 18
0
        private void Notify(LoggingRule rule, LoggingItem loggingItem)
        {
            if (_publishers.ContainsKey(rule.Notification))
            {
                return;
            }

            var settings = new NotificationServiceSettings();

            _configuration.GetSection("Notification").Bind(settings);

            var options = Options.Create(settings);

            settings.ServiceName = rule.Notification;

            var publisherSettings = new RemoteServiceSettings();

            _configuration.GetSection("Notification:Publisher").Bind(publisherSettings);

            _publishers.TryAdd(rule.Notification,
                               RegisterPublisher(publisherSettings, options, _loggerFactory, _diagnosticSource, settings));

            _publishers[rule.Notification]?.Publish(JsonConvert.SerializeObject(loggingItem));
        }
Esempio n. 19
0
 private IPublisherClientService RegisterPublisher(RemoteServiceSettings publisherSettings, IOptions <NotificationServiceSettings> options, ILoggerFactory loggerFactory, DiagnosticSource diagnosticSource, NotificationServiceSettings settings)
 {
     return(publisherSettings.IsLocal ? RegisterLocalPublisher(options, loggerFactory, diagnosticSource, settings) : RegisterRemotePublisher(publisherSettings));
 }
Esempio n. 20
0
 private IPublisherClientService RegisterRemotePublisher(RemoteServiceSettings publisherSettings)
 {
     return(new RemotePublisherClientService(publisherSettings, _httpClient));
 }
Esempio n. 21
0
 public static void AddSubscriber(this IServiceCollection services, RemoteServiceSettings remoteServiceSettings, IOptions <NotificationServiceSettings> options, ILoggerFactory loggerFactory, DiagnosticSource diagnosticSource, HttpClient remoteHttpClient = null)
 {
     RegisterSubscriber(services, remoteServiceSettings, options, loggerFactory, diagnosticSource);
 }
Esempio n. 22
0
        private static void RegisterSubscriber(IServiceCollection services, RemoteServiceSettings remoteServiceSettings,
                                               IOptions <NotificationServiceSettings> options, ILoggerFactory loggerFactory, DiagnosticSource diagnosticSource)
        {
            var settings = options.Value;

            if (!remoteServiceSettings.IsLocal)
            {
                return;
            }

            var serviceProvider = services.BuildServiceProvider();

            var eventChannelRepository = serviceProvider.GetService <EventChannelRepository>();

            if (eventChannelRepository == null)
            {
                eventChannelRepository = new EventChannelRepository(settings.Repository.ProviderAssembly,
                                                                    new ConnectionOptions
                {
                    Provider         = settings.Repository.ProviderType,
                    ConnectionString = settings.Repository.Channel,
                }, loggerFactory, diagnosticSource);

                services.AddSingleton(eventChannelRepository);
            }

            var eventSubscriptionRepository = serviceProvider.GetService <EventSubscriptionRepository>();

            if (eventSubscriptionRepository == null)
            {
                eventSubscriptionRepository = new EventSubscriptionRepository(eventChannelRepository,
                                                                              settings.Repository.ProviderAssembly,
                                                                              new ConnectionOptions
                {
                    Provider         = settings.Repository.ProviderType,
                    ConnectionString = settings.Repository.Subscription
                }, loggerFactory, diagnosticSource);

                services.AddSingleton(eventSubscriptionRepository);
            }

            var eventRepository = serviceProvider.GetService <EventRepository>();

            if (eventRepository == null)
            {
                eventRepository = new EventRepository(eventChannelRepository, settings.Repository.ProviderAssembly,
                                                      new ConnectionOptions
                {
                    Provider         = settings.Repository.ProviderType,
                    ConnectionString = settings.Repository.Events
                }, loggerFactory, diagnosticSource);

                services.AddSingleton(eventRepository);
            }

            var subscriber = new SubscriberClientService(eventChannelRepository,
                                                         eventSubscriptionRepository, eventRepository,
                                                         options, loggerFactory, diagnosticSource);

            services.AddSingleton(subscriber);
            services.AddSingleton <IHostedService>(subscriber);
        }
Esempio n. 23
0
 private static void RegisterRemotePublisher(RemoteServiceSettings publisherSettings, IServiceCollection services)
 {
     services.AddSingleton <IPublisherClientService>(new RemotePublisherClientService(publisherSettings, _httpClient));
 }