// 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(); }
/// <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; } }
/// <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) { }
/// <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(); }
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 })
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) { }
/// <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); }
/// <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(); }
// 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); } } }
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; } }
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>(); }
public MockEventProcessor( IEventConsumer <string> consumer, IEventProducer <int> producer, params IMessageHandler[] handlers) : base(consumer, producer, handlers) { }
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); } }; }
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); } }
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) { }
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); }
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; }
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; }
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")); } }); }
/// <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); }
/// <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()); }
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); } }
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); } }