Example #1
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IEntranceControl entranceControl,
                              IEventConsumer eventConsumer)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
            }
            app.UseStaticFiles();

            app.UseRouting();
            app.UseCors(DefaultCorsPolicy);

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapRazorPages();
                endpoints.MapControllers();
            });

            _ = Task.Run(() => eventConsumer.Listen());
            entranceControl.OpenPark();
        }
Example #2
0
        /// <summary>
        /// Construct a <see cref="Repository"/>
        /// </summary>
        /// <param name="libGitRepo">The value of <see cref="libGitRepo"/></param>
        /// <param name="commands">The value of <see cref="commands"/>.</param>
        /// <param name="ioMananger">The value of <see cref="ioMananger"/></param>
        /// <param name="eventConsumer">The value of <see cref="eventConsumer"/></param>
        /// <param name="credentialsProvider">The value of <see cref="credentialsProvider"/></param>
        /// <param name="logger">The value of <see cref="logger"/></param>
        /// <param name="onDispose">The value if <see cref="onDispose"/></param>
        public Repository(
            LibGit2Sharp.IRepository libGitRepo,
            ILibGit2Commands commands,
            IIOManager ioMananger,
            IEventConsumer eventConsumer,
            ICredentialsProvider credentialsProvider,
            ILogger <Repository> logger,
            Action onDispose)
        {
            this.libGitRepo          = libGitRepo ?? throw new ArgumentNullException(nameof(libGitRepo));
            this.commands            = commands ?? throw new ArgumentNullException(nameof(commands));
            this.ioMananger          = ioMananger ?? throw new ArgumentNullException(nameof(ioMananger));
            this.eventConsumer       = eventConsumer ?? throw new ArgumentNullException(nameof(eventConsumer));
            this.credentialsProvider = credentialsProvider ?? throw new ArgumentNullException(nameof(credentialsProvider));
            this.logger    = logger ?? throw new ArgumentNullException(nameof(logger));
            this.onDispose = onDispose ?? throw new ArgumentNullException(nameof(onDispose));

            IsGitHubRepository = Origin.Contains(GitHubUrl, StringComparison.InvariantCultureIgnoreCase);

            if (IsGitHubRepository)
            {
                GetRepositoryOwnerName(Origin, out var owner, out var name);
                GitHubOwner    = owner;
                GitHubRepoName = name;
            }
        }
Example #3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="BasicWatchdog"/> <see langword="class"/>.
 /// </summary>
 /// <param name="chat">The <see cref="IChatManager"/> for the <see cref="WatchdogBase"/>.</param>
 /// <param name="sessionControllerFactory">The <see cref="ISessionControllerFactory"/> for the <see cref="WatchdogBase"/>.</param>
 /// <param name="dmbFactory">The <see cref="IDmbFactory"/> for the <see cref="WatchdogBase"/>.</param>
 /// <param name="sessionPersistor">The <see cref="ISessionPersistor"/> for the <see cref="WatchdogBase"/>.</param>
 /// <param name="jobManager">The <see cref="IJobManager"/> for the <see cref="WatchdogBase"/>.</param>
 /// <param name="serverControl">The <see cref="IServerControl"/> for the <see cref="WatchdogBase"/>.</param>
 /// <param name="asyncDelayer">The <see cref="IAsyncDelayer"/> for the <see cref="WatchdogBase"/>.</param>
 /// <param name="diagnosticsIOManager">The <see cref="IIOManager"/> for the <see cref="WatchdogBase"/>.</param>
 /// <param name="eventConsumer">The <see cref="IEventConsumer"/> for the <see cref="WatchdogBase"/>.</param>
 /// <param name="logger">The <see cref="ILogger"/> for the <see cref="WatchdogBase"/>.</param>
 /// <param name="initialLaunchParameters">The <see cref="DreamDaemonLaunchParameters"/> for the <see cref="WatchdogBase"/>.</param>
 /// <param name="instance">The <see cref="Api.Models.Instance"/> for the <see cref="WatchdogBase"/>.</param>
 /// <param name="autoStart">The autostart value for the <see cref="WatchdogBase"/>.</param>
 public BasicWatchdog(
     IChatManager chat,
     ISessionControllerFactory sessionControllerFactory,
     IDmbFactory dmbFactory,
     ISessionPersistor sessionPersistor,
     IJobManager jobManager,
     IServerControl serverControl,
     IAsyncDelayer asyncDelayer,
     IIOManager diagnosticsIOManager,
     IEventConsumer eventConsumer,
     ILogger <BasicWatchdog> logger,
     DreamDaemonLaunchParameters initialLaunchParameters,
     Api.Models.Instance instance,
     bool autoStart)
     : base(
         chat,
         sessionControllerFactory,
         dmbFactory,
         sessionPersistor,
         jobManager,
         serverControl,
         asyncDelayer,
         diagnosticsIOManager,
         eventConsumer,
         logger,
         initialLaunchParameters,
         instance,
         autoStart)
 {
 }
Example #4
0
        /// <summary>
        /// Construct <see cref="DreamMaker"/>
        /// </summary>
        /// <param name="byond">The value of <see cref="byond"/></param>
        /// <param name="ioManager">The value of <see cref="ioManager"/></param>
        /// <param name="configuration">The value of <see cref="configuration"/></param>
        /// <param name="sessionControllerFactory">The value of <see cref="sessionControllerFactory"/></param>
        /// <param name="eventConsumer">The value of <see cref="eventConsumer"/></param>
        /// <param name="chatManager">The value of <see cref="chatManager"/></param>
        /// <param name="processExecutor">The value of <see cref="processExecutor"/></param>
        /// <param name="compileJobConsumer">The value of <see cref="compileJobConsumer"/>.</param>
        /// <param name="repositoryManager">The value of <see cref="repositoryManager"/>.</param>
        /// <param name="remoteDeploymentManagerFactory">The value of <see cref="remoteDeploymentManagerFactory"/>.</param>
        /// <param name="logger">The value of <see cref="logger"/></param>
        /// <param name="metadata">The value of <see cref="metadata"/>.</param>
        public DreamMaker(
            IByondManager byond,
            IIOManager ioManager,
            StaticFiles.IConfiguration configuration,
            ISessionControllerFactory sessionControllerFactory,
            IEventConsumer eventConsumer,
            IChatManager chatManager,
            IProcessExecutor processExecutor,
            ICompileJobSink compileJobConsumer,
            IRepositoryManager repositoryManager,
            IRemoteDeploymentManagerFactory remoteDeploymentManagerFactory,
            ILogger <DreamMaker> logger,
            Api.Models.Instance metadata)
        {
            this.byond                          = byond ?? throw new ArgumentNullException(nameof(byond));
            this.ioManager                      = ioManager ?? throw new ArgumentNullException(nameof(ioManager));
            this.configuration                  = configuration ?? throw new ArgumentNullException(nameof(configuration));
            this.sessionControllerFactory       = sessionControllerFactory ?? throw new ArgumentNullException(nameof(sessionControllerFactory));
            this.eventConsumer                  = eventConsumer ?? throw new ArgumentNullException(nameof(eventConsumer));
            this.chatManager                    = chatManager ?? throw new ArgumentNullException(nameof(chatManager));
            this.processExecutor                = processExecutor ?? throw new ArgumentNullException(nameof(processExecutor));
            this.compileJobConsumer             = compileJobConsumer ?? throw new ArgumentNullException(nameof(compileJobConsumer));
            this.repositoryManager              = repositoryManager ?? throw new ArgumentNullException(nameof(repositoryManager));
            this.remoteDeploymentManagerFactory = remoteDeploymentManagerFactory ?? throw new ArgumentNullException(nameof(remoteDeploymentManagerFactory));
            this.logger                         = logger ?? throw new ArgumentNullException(nameof(logger));
            this.metadata                       = metadata ?? throw new ArgumentNullException(nameof(metadata));

            deploymentLock = new object();
        }
Example #5
0
 protected IoProcessorBase(IEventConsumer eventConsumer, string ioProcessorId, string?ioProcessorAlias = default)
 {
     if (string.IsNullOrEmpty(ioProcessorId))
     {
         throw new ArgumentException(Resources.Exception_ValueCannotBeNullOrEmpty, nameof(ioProcessorId));
     }
     if (ioProcessorAlias is { Length : 0 })
Example #6
0
 public void UnsubscribeFromAllEvents(IEventConsumer consumer)
 {
     foreach (var registry in eventRegistry)
     {
         registry.Value.RemoveAll(x => x == consumer);
     }
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="BasicWatchdog"/> <see langword="class"/>.
 /// </summary>
 /// <param name="chat">The <see cref="IChat"/> for the <see cref="WatchdogBase"/>.</param>
 /// <param name="sessionControllerFactory">The <see cref="ISessionControllerFactory"/> for the <see cref="WatchdogBase"/>.</param>
 /// <param name="dmbFactory">The <see cref="IDmbFactory"/> for the <see cref="WatchdogBase"/>.</param>
 /// <param name="reattachInfoHandler">The <see cref="IReattachInfoHandler"/> for the <see cref="WatchdogBase"/>.</param>
 /// <param name="databaseContextFactory">The <see cref="IDatabaseContextFactory"/> for the <see cref="WatchdogBase"/>.</param>
 /// <param name="byondTopicSender">The <see cref="IByondTopicSender"/> for the <see cref="WatchdogBase"/>.</param>
 /// <param name="eventConsumer">The <see cref="IEventConsumer"/> for the <see cref="WatchdogBase"/>.</param>
 /// <param name="jobManager">The <see cref="IJobManager"/> for the <see cref="WatchdogBase"/>.</param>
 /// <param name="serverControl">The <see cref="IServerControl"/> for the <see cref="WatchdogBase"/>.</param>
 /// <param name="asyncDelayer">The <see cref="IAsyncDelayer"/> for the <see cref="WatchdogBase"/>.</param>
 /// <param name="logger">The <see cref="ILogger"/> for the <see cref="WatchdogBase"/>.</param>
 /// <param name="initialLaunchParameters">The <see cref="DreamDaemonLaunchParameters"/> for the <see cref="WatchdogBase"/>.</param>
 /// <param name="instance">The <see cref="Api.Models.Instance"/> for the <see cref="WatchdogBase"/>.</param>
 /// <param name="autoStart">The autostart value for the <see cref="WatchdogBase"/>.</param>
 public BasicWatchdog(
     IChat chat,
     ISessionControllerFactory sessionControllerFactory,
     IDmbFactory dmbFactory,
     IReattachInfoHandler reattachInfoHandler,
     IDatabaseContextFactory databaseContextFactory,
     IByondTopicSender byondTopicSender,
     IEventConsumer eventConsumer,
     IJobManager jobManager,
     IServerControl serverControl,
     IAsyncDelayer asyncDelayer,
     ILogger <BasicWatchdog> logger,
     DreamDaemonLaunchParameters initialLaunchParameters,
     Api.Models.Instance instance,
     bool autoStart)
     : base(
         chat,
         sessionControllerFactory,
         dmbFactory,
         reattachInfoHandler,
         databaseContextFactory,
         byondTopicSender,
         eventConsumer,
         jobManager,
         serverControl,
         asyncDelayer,
         logger,
         initialLaunchParameters,
         instance,
         autoStart)
 {
 }
Example #8
0
        /// <summary>
        /// Construct a <see cref="Repository"/>
        /// </summary>
        /// <param name="libGitRepo">The value of <see cref="libGitRepo"/></param>
        /// <param name="commands">The value of <see cref="commands"/>.</param>
        /// <param name="ioMananger">The value of <see cref="ioMananger"/></param>
        /// <param name="eventConsumer">The value of <see cref="eventConsumer"/></param>
        /// <param name="credentialsProvider">The value of <see cref="credentialsProvider"/></param>
        /// <param name="gitRemoteFeaturesFactory">The <see cref="IGitRemoteFeaturesFactory"/> to provide the value of <see cref="gitRemoteFeatures"/>.</param>
        /// <param name="logger">The value of <see cref="logger"/></param>
        /// <param name="onDispose">The value if <see cref="onDispose"/></param>
        public Repository(
            LibGit2Sharp.IRepository libGitRepo,
            ILibGit2Commands commands,
            IIOManager ioMananger,
            IEventConsumer eventConsumer,
            ICredentialsProvider credentialsProvider,
            IGitRemoteFeaturesFactory gitRemoteFeaturesFactory,
            ILogger <Repository> logger,
            Action onDispose)
        {
            this.libGitRepo          = libGitRepo ?? throw new ArgumentNullException(nameof(libGitRepo));
            this.commands            = commands ?? throw new ArgumentNullException(nameof(commands));
            this.ioMananger          = ioMananger ?? throw new ArgumentNullException(nameof(ioMananger));
            this.eventConsumer       = eventConsumer ?? throw new ArgumentNullException(nameof(eventConsumer));
            this.credentialsProvider = credentialsProvider ?? throw new ArgumentNullException(nameof(credentialsProvider));
            if (gitRemoteFeaturesFactory == null)
            {
                throw new ArgumentNullException(nameof(gitRemoteFeaturesFactory));
            }

            this.logger    = logger ?? throw new ArgumentNullException(nameof(logger));
            this.onDispose = onDispose ?? throw new ArgumentNullException(nameof(onDispose));

            gitRemoteFeatures = gitRemoteFeaturesFactory.CreateGitRemoteFeatures(this);
        }
Example #9
0
        /// <summary>
        /// Construct an <see cref="Instance"/>
        /// </summary>
        /// <param name="metadata">The value of <see cref="metadata"/></param>
        /// <param name="repositoryManager">The value of <see cref="RepositoryManager"/></param>
        /// <param name="byondManager">The value of <see cref="ByondManager"/></param>
        /// <param name="dreamMaker">The value of <see cref="DreamMaker"/></param>
        /// <param name="watchdog">The value of <see cref="Watchdog"/></param>
        /// <param name="chat">The value of <see cref="Chat"/></param>
        /// <param name="configuration">The value of <see cref="Configuration"/></param>
        /// <param name="databaseContextFactory">The value of <see cref="databaseContextFactory"/></param>
        /// <param name="dmbFactory">The value of <see cref="dmbFactory"/></param>
        /// <param name="jobManager">The value of <see cref="jobManager"/></param>
        /// <param name="eventConsumer">The value of <see cref="eventConsumer"/></param>
        /// <param name="logger">The value of <see cref="logger"/></param>
        public Instance(
            Api.Models.Instance metadata,
            IRepositoryManager repositoryManager,
            IByondManager byondManager,
            IDreamMaker dreamMaker,
            IWatchdog watchdog,
            IChatManager chat,
            StaticFiles.IConfiguration
            configuration,
            IDatabaseContextFactory databaseContextFactory,
            IDmbFactory dmbFactory,
            IJobManager jobManager,
            IEventConsumer eventConsumer,
            ILogger <Instance> logger)
        {
            this.metadata     = metadata ?? throw new ArgumentNullException(nameof(metadata));
            RepositoryManager = repositoryManager ?? throw new ArgumentNullException(nameof(repositoryManager));
            ByondManager      = byondManager ?? throw new ArgumentNullException(nameof(byondManager));
            DreamMaker        = dreamMaker ?? throw new ArgumentNullException(nameof(dreamMaker));
            Watchdog          = watchdog ?? throw new ArgumentNullException(nameof(watchdog));
            Chat          = chat ?? throw new ArgumentNullException(nameof(chat));
            Configuration = configuration ?? throw new ArgumentNullException(nameof(configuration));
            this.databaseContextFactory = databaseContextFactory ?? throw new ArgumentNullException(nameof(databaseContextFactory));
            this.dmbFactory             = dmbFactory ?? throw new ArgumentNullException(nameof(dmbFactory));
            this.jobManager             = jobManager ?? throw new ArgumentNullException(nameof(jobManager));
            this.eventConsumer          = eventConsumer ?? throw new ArgumentNullException(nameof(eventConsumer));
            this.logger = logger ?? throw new ArgumentNullException(nameof(logger));

            timerLock = new object();
        }
Example #10
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IEventConsumer eventConsumer,
                              IRideControl rideControl)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.UseRouting();
            app.UseCors(DefaultCorsPolicy);

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
            });

            _ = Task.Run(() => eventConsumer.Listen());

            _ = Task.Run(() =>
            {
                while (true)
                {
                    rideControl.HandleOpenRides();
                    Task.Delay(1000).Wait();
                }
            });
        }
        private async Task OperationWithRetryAsync(IEventConsumer eventConsumer, IEnumerable <IEventMessage> events)
        {
            int    currentRetry      = 0;
            double backoffMs         = 0;
            Random random            = new Random();
            bool   operationComplete = false;

            while (!operationComplete)
            {
                try
                {
                    if (currentRetry > 0 && backoffMs < _maximumBackoffMs)
                    {
                        int randomMs = random.Next(0, 1000);
                        backoffMs = Math.Pow(2000, currentRetry) + randomMs;
                        await Task.Delay((int)backoffMs);
                    }

                    await TryOperationAsync(eventConsumer, events).ConfigureAwait(false);

                    break;
                }
#pragma warning disable CA1031
                catch (Exception e)
#pragma warning restore CA1031
                {
                    _logger.LogError(e);
                }
            }
        }
Example #12
0
        private async Task ResetAsync(IEventConsumer eventConsumer, string consumerName)
        {
            var actionId = Guid.NewGuid().ToString();

            try
            {
                log.LogInformation(w => w
                                   .WriteProperty("action", "EventConsumerReset")
                                   .WriteProperty("actionId", actionId)
                                   .WriteProperty("state", "Started")
                                   .WriteProperty("eventConsumer", eventConsumer.GetType().Name));

                await eventConsumer.ClearAsync();

                await eventConsumerInfoRepository.SetLastHandledEventNumberAsync(consumerName, -1);

                log.LogInformation(w => w
                                   .WriteProperty("action", "EventConsumerReset")
                                   .WriteProperty("actionId", actionId)
                                   .WriteProperty("state", "Completed")
                                   .WriteProperty("eventConsumer", eventConsumer.GetType().Name));
            }
            catch (Exception ex)
            {
                log.LogFatal(ex, w => w
                             .WriteProperty("action", "EventConsumerReset")
                             .WriteProperty("actionId", actionId)
                             .WriteProperty("state", "Completed")
                             .WriteProperty("eventConsumer", eventConsumer.GetType().Name));

                throw;
            }
        }
Example #13
0
        public Program()
        {
            // Configuring configuration module
            var configuration = new ConfigurationBuilder()
                                .SetBasePath(Directory.GetCurrentDirectory())
                                .AddJsonFile("appsettings.json", false)
                                .Build();

            // Configuring logging
            var serviceCollection = new ServiceCollection()
                                    .AddLogging(builder =>
            {
                builder
                .AddConfiguration(configuration.GetSection("Logging"))
                .AddConsole(logger => { logger.IncludeScopes = false; });
            });

            // Configuring dependency injection
            serviceCollection.Configure <EventHubsSettings>(configuration.GetSection("Events"));
            serviceCollection.AddSingleton <IEventConsumer, EventHubsEventConsumer>();

            // Build the service collection for dependency injection
            ServiceProvider serviceProvider = serviceCollection.BuildServiceProvider();

            // getting the logger using the class's name is conventional
            _logger = serviceProvider.GetRequiredService <ILogger <Program> >();
            // getting the event consumer
            _eventConsumer = serviceProvider.GetRequiredService <IEventConsumer>();
        }
Example #14
0
 public MockEventProcessor(
     IEventConsumer <string> consumer,
     IEventProducer <int> producer,
     params IMessageHandler[] handlers)
     : base(consumer, producer, handlers)
 {
 }
Example #15
0
        public WorkerProcess(IEventConsumer consumer,
                             ISpotCharterCommandRepository source,
                             ISpotCharterUpdateViewRepository destination)
        {
            // Define mapping rule between Command and Query models
            Mapper.Initialize(cfg => {
                cfg.CreateMap <SpotCharterDomain.ValueObjects.FreightRate, string>().ConstructUsing((rate, ctx) => rate?.ToString() ?? null);
                cfg.CreateMap <SpotCharter, SpotCharterView>()
                .AfterMap((src, dest) => { dest.LastUpdate = DateTime.Now; });
            });

            this.source      = source;
            this.destination = destination;

            this.consumer = consumer;

            this.consumer.ReceivedEventHandler += (e) =>
            {
                try
                {
                    dynamic eventPayload = JsonConvert.DeserializeObject(e.Payload);
                    var     spotId       = new SpotCharterId(Guid.Parse(eventPayload.AggregateId.Value.ToString()));

                    // check if last version has been updated already
                    if (!lastVersionsDictionary.Keys.Contains(spotId) || lastVersionsDictionary[spotId] < e.Version)
                    {
                        switch (e.EventName)
                        {
                        case "SpotCharterDeleted":
                            destination.Remove(spotId);
                            Console.WriteLine("Spot {0} removed.", spotId);
                            break;

                        default:
                            var spot = source.Get(spotId);

                            var spotView = Mapper.Map <SpotCharterView>(spot);

                            destination.Save(spotView);
                            lastVersionsDictionary[spotId] = spot.Version;     // put the version from the entity, not from the processing event

                            Console.WriteLine("Spot {0} updated to version {1}", spotId, spot.Version);
                            break;
                        }

                        Console.WriteLine("[{3:HH:mm:ss}] Event {0}\tSpot Id {1} Version {2} processed.", e.EventName, spotId, e.Version, DateTime.Now);
                    }
                    else
                    {
                        Console.WriteLine("SpotId : {0} Version {1} already updated. Skipping.", spotId, e.Version);
                    }
                    consumer.AckReceived(e.Id);
                }
                catch (Exception ex)
                {
                    Console.Error.WriteLine(ex);
                }
            };
        }
Example #16
0
 public void UnsubscribeFromEvent(IEventConsumer consumer, ulong eventID)
 {
     //If the event isn't in the dictionary. This shouldn't ever happen
     if (eventRegistry.ContainsKey(eventID))
     {
         eventRegistry[eventID].Remove(consumer);
     }
 }
Example #17
0
 public void SubscribeToEvent(IEventConsumer consumer, ulong eventID)
 {
     if (!eventRegistry.ContainsKey(eventID))
     {
         eventRegistry[eventID] = new List <IEventConsumer>();
     }
     eventRegistry[eventID].Add(consumer);
 }
 /// <summary>
 /// Kafka event processor constructor.
 /// </summary>
 /// <param name="consumer">Event consumer.</param>
 /// <param name="producer">Event producer.</param>
 /// <param name="handlers">Event handlers.</param>
 public KafkaEventProcessorWithResult(
     IEventConsumer <Confluent.Kafka.Message <TSourceKey, TSourceValue> > consumer,
     IEventProducerAsync <Confluent.Kafka.Message <TSinkKey, TSinkValue>,
                          Confluent.Kafka.DeliveryResult <TSinkKey, TSinkValue> > producer,
     params IMessageHandler[] handlers)
     : base(consumer, producer, handlers)
 {
 }
Example #19
0
        protected override Task OnActivateAsync(string key)
        {
            scheduler = TaskScheduler.Current;

            eventConsumer = eventConsumerFactory(key);

            return(TaskHelper.Done);
        }
        public async ValueTask <IIoProcessor> Create(IEventConsumer eventConsumer, CancellationToken token)
        {
            var httpIoProcessor = new HttpIoProcessor(eventConsumer, _baseUri, _ipEndPoint);

            await httpIoProcessor.Start(token).ConfigureAwait(false);

            return(httpIoProcessor);
        }
Example #21
0
        public Task SubscribeAsync(IEventConsumer eventConsumer)
        {
            Guard.NotNull(eventConsumer, nameof(eventConsumer));

            return(dispatcher.SendAsync(new Setup {
                EventConsumer = eventConsumer
            }));
        }
 /// <summary>
 /// Event stream processor constructor.
 /// </summary>
 /// <param name="consumer">Event consumer.</param>
 /// <param name="producer">Event producer.</param>
 /// <param name="handlers">Event handlers.</param>
 public EventProcessorWithResult(
     IEventConsumer <TSourceEvent> consumer,
     IEventProducerAsync <TSinkEvent, TResult> producer,
     params IMessageHandler[] handlers)
     : base(handlers)
 {
     this.consumer = consumer;
     this.producer = producer;
 }
Example #23
0
 private void ConsumerLinkTestMethod()
 {
     consumer = null;
     GC.Collect();
     Assert.IsFalse(consumerRef.IsAlive);
     Assert.IsTrue(source.InvocationCount == 1);
     source.Fire();
     Assert.IsTrue(source.InvocationCount == 0);
 }
        public CompoundEventConsumer(IEventConsumer first, params IEventConsumer[] inners)
        {
            Guard.NotNull(first, nameof(first));
            Guard.NotNull(inners, nameof(inners));

            this.inners = new[] { first }.Union(inners).ToArray();

            Name = first.GetType().Name;
        }
Example #25
0
 private void ConsumerLinkTestMethod()
 {
     consumer = null;
     GC.Collect();
     Assert.IsFalse(consumerRef.IsAlive);
     Assert.IsTrue(source.InvocationCount == 1);
     source.Fire();
     Assert.IsTrue(source.InvocationCount == 0);
 }
Example #26
0
        public void Subscribe(IEventConsumer eventConsumer)
        {
            Guard.NotNull(eventConsumer, nameof(eventConsumer));

            ThrowIfDisposed();

            if (timer != null)
            {
                return;
            }

            var consumerName    = eventConsumer.Name;
            var consumerStarted = false;

            timer = new CompletionTimer(5000, async ct =>
            {
                if (!consumerStarted)
                {
                    await eventConsumerInfoRepository.CreateAsync(consumerName);

                    consumerStarted = true;
                }

                try
                {
                    var status = await eventConsumerInfoRepository.FindAsync(consumerName);

                    var position = status.Position;

                    if (status.IsResetting)
                    {
                        currentSubscription?.Dispose();
                        currentSubscription = null;

                        position = null;

                        await ResetAsync(eventConsumer);
                    }
                    else if (status.IsStopped)
                    {
                        currentSubscription?.Dispose();
                        currentSubscription = null;

                        return;
                    }

                    if (currentSubscription == null)
                    {
                        await SubscribeAsync(eventConsumer, position);
                    }
                }
                catch (Exception ex)
                {
                    log.LogFatal(ex, w => w.WriteProperty("action", "EventHandlingFailed"));
                }
            });
        }
Example #27
0
 /// <summary>
 /// Construct a <see cref="RepositoryManager"/>
 /// </summary>
 /// <param name="repositorySettings">The value of <see cref="repositorySettings"/></param>
 /// <param name="ioManager">The value of <see cref="ioManager"/></param>
 /// <param name="eventConsumer">The value of <see cref="eventConsumer"/></param>
 /// <param name="credentialsProvider">The value of <see cref="credentialsProvider"/></param>
 /// <param name="repositoryLogger">The value of <see cref="repositoryLogger"/></param>
 /// <param name="logger">The value of <see cref="logger"/></param>
 public RepositoryManager(RepositorySettings repositorySettings, IIOManager ioManager, IEventConsumer eventConsumer, ICredentialsProvider credentialsProvider, ILogger <Repository> repositoryLogger, ILogger <RepositoryManager> logger)
 {
     this.repositorySettings  = repositorySettings ?? throw new ArgumentNullException(nameof(repositorySettings));
     this.ioManager           = ioManager ?? throw new ArgumentNullException(nameof(ioManager));
     this.eventConsumer       = eventConsumer ?? throw new ArgumentNullException(nameof(eventConsumer));
     this.credentialsProvider = credentialsProvider ?? throw new ArgumentNullException(nameof(credentialsProvider));
     this.repositoryLogger    = repositoryLogger ?? throw new ArgumentNullException(nameof(repositoryLogger));
     this.logger = logger ?? throw new ArgumentNullException(nameof(logger));
     semaphore   = new SemaphoreSlim(1);
 }
Example #28
0
        /// <summary>
        /// Construct a <see cref="ByondManager"/>
        /// </summary>
        /// <param name="ioManager">The value of <see cref="ioManager"/></param>
        /// <param name="byondInstaller">The value of <see cref="byondInstaller"/></param>
        /// <param name="eventConsumer">The value of <see cref="eventConsumer"/></param>
        /// <param name="logger">The value of <see cref="logger"/></param>
        public ByondManager(IIOManager ioManager, IByondInstaller byondInstaller, IEventConsumer eventConsumer, ILogger <ByondManager> logger)
        {
            this.ioManager      = ioManager ?? throw new ArgumentNullException(nameof(ioManager));
            this.byondInstaller = byondInstaller ?? throw new ArgumentNullException(nameof(byondInstaller));
            this.eventConsumer  = eventConsumer ?? throw new ArgumentNullException(nameof(eventConsumer));
            this.logger         = logger ?? throw new ArgumentNullException(nameof(logger));

            installedVersions = new Dictionary <string, Task>();
            semaphore         = new SemaphoreSlim(1);
        }
 public void RegisterConsumer <TEventMessage>(IEventConsumer <TEventMessage> consumer)
 {
     m_Events.AddOrUpdate(typeof(IEventConsumer <TEventMessage>), x => new List <object> {
         consumer
     }, (x, y) =>
     {
         y.Add(consumer);
         return(y);
     });
 }
        public void Publish <TEventMessage>(TEventMessage eventMessage)
        {
            IList <IEventConsumer <TEventMessage> > subscriptions = m_SubscriptionProvider.GetSubscriptions <TEventMessage>();

            for (int i = 0; i < subscriptions.Count; i++)
            {
                IEventConsumer <TEventMessage> eventConsumer = subscriptions[i];
                PublishToConsumer(eventConsumer, eventMessage);
            }
        }
        public override Task OnActivateAsync(string key)
        {
            scheduler = TaskScheduler.Current;

            eventConsumer = eventConsumerFactory(key);

            persistence = store.WithSnapshots <EventConsumerState, string>(GetType(), eventConsumer.Name, s => state = s);

            return(persistence.ReadAsync());
        }
Example #32
0
        public void SetupTestGeneric(bool both)
        {
            source = new EventSourceGeneric();
            sourceRef = new WeakReference(source);

            consumer = new EventConsumerGeneric((EventSourceGeneric) source);
            consumerRef = new WeakReference(consumer);

            if (both)
            {
                consumer2 = new EventConsumerGeneric((EventSourceGeneric) source);
                consumerRef2 = new WeakReference(consumer2);
            }
        }
Example #33
0
        public void SetupTestPropChange(bool both)
        {
            source = new EventSourcePropChange();
            sourceRef = new WeakReference(source);

            consumer = new EventConsumerPropChange((EventSourcePropChange) source);
            consumerRef = new WeakReference(consumer);

            if (both)
            {
                consumer2 = new EventConsumerPropChange((EventSourcePropChange) source);
                consumerRef2 = new WeakReference(consumer2);
            }
        }