diff --git a/gateway/src/IntegrationGateway.Host/Program.cs b/gateway/src/IntegrationGateway.Host/Program.cs index b49a5b7..4c7e38f 100644 --- a/gateway/src/IntegrationGateway.Host/Program.cs +++ b/gateway/src/IntegrationGateway.Host/Program.cs @@ -31,8 +31,6 @@ var app = builder.Build(); // ── 读取配置 ── var gwCfg = app.Configuration.GetSection("Gateway"); -var owlCfg = app.Configuration.GetSection("Owl"); -var mc4Cfg = app.Configuration.GetSection("MC4"); // ── 创建适配器注册中心 ── var registry = new AdapterRegistry(); @@ -42,27 +40,34 @@ var volProUrl = gwCfg["VolProBaseUrl"] ?? "http://localhost:9100"; var httpFactory = app.Services.GetRequiredService(); var clientFactory = new GatewayClientFactory(httpFactory, volProUrl); -// ── 注册 OwlAdapter ── -var owlHttp = app.Services.GetRequiredService().CreateClient("VolPro"); -var owlAdapter = new IntegrationGateway.Adapters.Owl.OwlAdapter( - "Owl:main", owlHttp, - owlCfg["BaseUrl"] ?? "http://localhost:15123", - owlCfg["Username"] ?? "admin", - owlCfg["Password"] ?? "admin" -); -registry.Register(owlAdapter); +// ── 注册 OwlAdapter(多实例遍历)── +var owlList = app.Configuration.GetSection("Owl").Get>() ?? new(); +foreach (var o in owlList) +{ + var code = $"Owl:{o.InstanceName ?? "default"}"; + var a = new IntegrationGateway.Adapters.Owl.OwlAdapter(code, + app.Services.GetRequiredService().CreateClient("VolPro"), + o.BaseUrl, o.Username, o.Password); + registry.Register(a); +} -// ── 注册 MC4Adapter ── -var mc4Http = app.Services.GetRequiredService().CreateClient("VolPro"); -var mc4Adapter = new IntegrationGateway.Adapters.MC4.Mc4Adapter( - "MC4:31ku", mc4Http, - mc4Cfg["BaseUrl"] ?? "http://localhost:3000" -); -registry.Register(mc4Adapter); +// ── 注册 MC4Adapter(多实例遍历)── +var mc4List = app.Configuration.GetSection("MC4").Get>() ?? new(); +foreach (var m in mc4List) +{ + var code = $"MC4:{m.InstanceName ?? "default"}"; + var a = new IntegrationGateway.Adapters.MC4.Mc4Adapter(code, + app.Services.GetRequiredService().CreateClient("VolPro"), + m.BaseUrl); + registry.Register(a); +} + +// ── 动态拼接 AdapterTypes 字符串 ── +var adapterTypes = string.Join(",", registry.All.Select(a => a.AdapterCode)); // ── 并行初始化所有适配器 ── await registry.InitializeAllAsync(); -Console.WriteLine($"[Gateway] {registry.All.Count} 个适配器已注册"); +Console.WriteLine($"[Gateway] {registry.All.Count} 个适配器已注册: {adapterTypes}"); // ═══════════════════════════════════════════════════════════════ // B 组路由(管理端 / Vol.Pro → 网关) @@ -207,6 +212,26 @@ app.MapPost("/api/gateway/devices/sync", async (string adapter) => app.Run(); +// ═══════════════════════════════════════════════ +// 配置 POCO +// ═══════════════════════════════════════════════ + +/// Owl 适配器配置项 +public class OwlConfig +{ + public string? InstanceName { get; set; } + public string BaseUrl { get; set; } = ""; + public string Username { get; set; } = "admin"; + public string Password { get; set; } = "admin"; +} + +/// MC4.0 适配器配置项 +public class Mc4Config +{ + public string? InstanceName { get; set; } + public string BaseUrl { get; set; } = ""; +} + // ═══════════════════════════════════════════════ // B 组请求 DTO // ═══════════════════════════════════════════════ diff --git a/gateway/src/IntegrationGateway.Host/appsettings.json b/gateway/src/IntegrationGateway.Host/appsettings.json index 7f9cbd8..e4d8491 100644 --- a/gateway/src/IntegrationGateway.Host/appsettings.json +++ b/gateway/src/IntegrationGateway.Host/appsettings.json @@ -5,14 +5,20 @@ "Microsoft.AspNetCore": "Warning" } }, - "Owl": { - "BaseUrl": "http://localhost:15123", - "Username": "admin", - "Password": "your_owl_password" - }, - "MC4": { - "BaseUrl": "http://localhost:3000" - }, + "Owl": [ + { + "InstanceName": "main", + "BaseUrl": "http://localhost:15123", + "Username": "admin", + "Password": "your_owl_password" + } + ], + "MC4": [ + { + "InstanceName": "31ku", + "BaseUrl": "http://localhost:3000" + } + ], "Gateway": { "VolProBaseUrl": "http://localhost:9100", "NodeCode": "gw-31ku",