public ProximityDetectedEventProcessor( ILogger <ProximityDetectedEventProcessor> logger, IRealtimePublisher publisher, IEventSubscriber subscriber, ITeamServiceClient teamClient, IOptions <PubnubOptions> pubnubOptions) { this.logger = logger; this.pubnubOptions = pubnubOptions.Value; this.publisher = publisher; this.subscriber = subscriber; logger.LogInformation("Created Proximity Event Processor."); subscriber.ProximityDetectedEventReceived += (pde) => { Team t = teamClient.GetTeam(pde.TeamID); Member sourceMember = teamClient.GetMember(pde.TeamID, pde.SourceMemberID); Member targetMember = teamClient.GetMember(pde.TeamID, pde.TargetMemberID); ProximityDetectedRealtimeEvent outEvent = new ProximityDetectedRealtimeEvent { TargetMemberID = pde.TargetMemberID, SourceMemberID = pde.SourceMemberID, DetectionTime = pde.DetectionTime, SourceMemberLocation = pde.SourceMemberLocation, TargetMemberLocation = pde.TargetMemberLocation, MemberDistance = pde.MemberDistance, TeamID = pde.TeamID, TeamName = t.Name, SourceMemberName = $"{sourceMember.FirstName} {sourceMember.LastName}", TargetMemberName = $"{targetMember.FirstName} {targetMember.LastName}" }; publisher.Publish(this.pubnubOptions.ProximityEventChannel, outEvent.toJson()); }; }
// Singletons are lazy instantiation.. so if we don't ask for an instance during startup, // they'll never get used. public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IEventProcessor eventProcessor, IOptions <PubnubOptions> pubnubOptions, IRealtimePublisher realtimePublisher) { realtimePublisher.Validate(); realtimePublisher.Publish(pubnubOptions.Value.StartupChannel, "{'hello': 'world'}"); eventProcessor.Start(); app.UseMvc(); }
// Singletons are lazy instantiation.. so if we don't ask for an instance during startup, // they'll never get used. public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IEventProcessor eventProcessor, IOptions <PubnubOptions> pubnubOptions, IRealtimePublisher realtimePublisher) { realtimePublisher.Validate(); realtimePublisher.Publish(pubnubOptions.Value.StartupChannel, "{'hello': 'world'}"); eventProcessor.Start(); app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); endpoints.MapControllerRoute( name: "default", pattern: "{controller}/{action}/{id?}" ); }); }