After receiving the initial snapshot via ClusterClient, the bridge actor now opens a gRPC server-streaming subscription via SiteStreamGrpcClient for ongoing AttributeValueChanged/AlarmStateChanged events. Adds NodeA/ NodeB failover with max 3 retries, retry count reset on successful event, and IWithTimers-based reconnect scheduling. - DebugStreamBridgeActor: gRPC stream after snapshot, reconnect state machine - DebugStreamService: inject SiteStreamGrpcClientFactory, resolve gRPC addresses - ServiceCollectionExtensions: register SiteStreamGrpcClientFactory singleton - SiteStreamGrpcClient: make SubscribeAsync/Unsubscribe virtual for testability - SiteStreamGrpcClientFactory: make GetOrCreate virtual for testability - New test suite: DebugStreamBridgeActorTests (8 tests)
27 lines
909 B
C#
27 lines
909 B
C#
using Microsoft.Extensions.DependencyInjection;
|
|
using ScadaLink.Communication.Grpc;
|
|
|
|
namespace ScadaLink.Communication;
|
|
|
|
public static class ServiceCollectionExtensions
|
|
{
|
|
public static IServiceCollection AddCommunication(this IServiceCollection services)
|
|
{
|
|
services.AddOptions<CommunicationOptions>()
|
|
.BindConfiguration("Communication");
|
|
|
|
services.AddSingleton<CommunicationService>();
|
|
services.AddSingleton<SiteStreamGrpcClientFactory>();
|
|
services.AddSingleton<DebugStreamService>();
|
|
|
|
return services;
|
|
}
|
|
|
|
public static IServiceCollection AddCommunicationActors(this IServiceCollection services)
|
|
{
|
|
// Actor registration happens in AkkaHostedService.RegisterCentralActors/RegisterSiteActors.
|
|
// This method is a hook for any additional DI registrations needed by the communication actors.
|
|
return services;
|
|
}
|
|
}
|