using Fleet.Core; using Fleet.Rpc; using Fleet.Server; using Microsoft.Extensions.DependencyInjection; using Monitor.Backend.Application; using Monitor.Protocol; namespace Monitor.Backend.Gateway; public static class GatewayServiceCollectionExtensions { /// /// 在 Fleet.Server 之上接入 Monitor:期望状态(TaskSet)、RawChunk 收件箱、monitor.* 方法、注册挂钩和节点事件。 /// 需要事先注册 和 ,并在 AddMonitorApplication 之后调用。 /// public static IServiceCollection AddMonitorGateway(this IServiceCollection services) { services.AddSingleton(); services.AddHostedService(); services.AddFleetEnrollment(); services.AddFleetServer(options => options.NodeIdPrefix = AgentIds.Prefix) .AddState() .AddState() .AddInbox() .MapMethods(MapMonitorMethods); return services; } private static void MapMonitorMethods(RpcRouter router, IServiceProvider services) { router .OnNotify( MonitorMethods.Event, MonitorJsonContext.Default.AgentEventParams, (context, parameters, ct) => services.GetRequiredService().OnEventAsync(context.Node.Id, parameters, ct)) .OnNotify( MonitorMethods.Host, MonitorJsonContext.Default.HostSnapshot, (context, snapshot, ct) => services.GetRequiredService().OnHostAsync(context.Node.Id, snapshot, ct)) .OnNotify( MonitorMethods.TestStatus, MonitorJsonContext.Default.TestStatusParams, (context, parameters, ct) => services.GetRequiredService().OnStatusAsync(context.Node.Id, parameters, ct)); } }