43 lines
2.0 KiB
C#
43 lines
2.0 KiB
C#
using Microsoft.Extensions.Logging.Abstractions;
|
|
using ZB.MOM.WW.MxGateway.Server.Configuration;
|
|
using ZB.MOM.WW.MxGateway.Server.Grpc;
|
|
|
|
namespace ZB.MOM.WW.MxGateway.Server.Sessions;
|
|
|
|
/// <summary>
|
|
/// Dependencies a <see cref="GatewaySession"/> needs to construct and own its
|
|
/// <see cref="SessionEventDistributor"/>. Bundled so the session constructor stays a
|
|
/// single optional parameter rather than four, and so unit tests that build a session
|
|
/// directly get a working distributor from <see cref="Default"/> without wiring DI.
|
|
/// </summary>
|
|
/// <param name="Mapper">
|
|
/// Maps worker IPC <c>WorkerEvent</c> frames to public <c>MxEvent</c>s. The distributor
|
|
/// pump applies this once per event in worker order, mirroring the mapping
|
|
/// <c>EventStreamService.ProduceEventsAsync</c> used before Task 4.
|
|
/// </param>
|
|
/// <param name="EventOptions">
|
|
/// Supplies the distributor's per-subscriber queue capacity and replay ring-buffer
|
|
/// bounds (<see cref="EventOptions.QueueCapacity"/>,
|
|
/// <see cref="EventOptions.ReplayBufferCapacity"/>,
|
|
/// <see cref="EventOptions.ReplayRetentionSeconds"/>).
|
|
/// </param>
|
|
/// <param name="DistributorLogger">Logger for the distributor pump lifecycle.</param>
|
|
/// <param name="TimeProvider">Clock used to timestamp and age-evict replay entries.</param>
|
|
public sealed record SessionEventStreaming(
|
|
MxAccessGrpcMapper Mapper,
|
|
EventOptions EventOptions,
|
|
ILogger<SessionEventDistributor> DistributorLogger,
|
|
TimeProvider TimeProvider)
|
|
{
|
|
/// <summary>
|
|
/// Defaults used when a session is constructed without explicit streaming
|
|
/// dependencies (unit tests). Uses a fresh mapper, default event options, a no-op
|
|
/// logger, and the system clock.
|
|
/// </summary>
|
|
public static SessionEventStreaming Default { get; } = new(
|
|
new MxAccessGrpcMapper(),
|
|
new EventOptions(),
|
|
NullLogger<SessionEventDistributor>.Instance,
|
|
TimeProvider.System);
|
|
}
|