diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 35b4e8d2..89dc85ab 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -86,7 +86,9 @@ "PowerShell($lib = Get-ChildItem \"$env:USERPROFILE\\\\.nuget\\\\packages\\\\devexpress.blazor\" -Directory | Sort-Object Name | Select-Object -Last 1; \"Verzio: $\\($lib.Name\\)\"; $dll = Get-ChildItem $lib.FullName -Recurse -Filter \"DevExpress.Blazor.dll\" | Select-Object -First 1; $asm = [System.Reflection.Assembly]::LoadFile\\($dll.FullName\\); $t = $asm.GetType\\(\"DevExpress.Blazor.MessageBoxOptions\"\\); if \\($t\\) { $t.GetProperties\\(\\) | Select-Object -ExpandProperty Name } else { \"MessageBoxOptions tipus nem talalhato\" })", "PowerShell($dll = Get-ChildItem \"$env:USERPROFILE\\\\.nuget\\\\packages\\\\devexpress.blazor\\\\25.1.5\" -Recurse -Filter \"DevExpress.Blazor.dll\" | Select-Object -First 1; $dll.FullName; $bytes = [System.IO.File]::ReadAllBytes\\($dll.FullName\\); $text = [System.Text.Encoding]::ASCII.GetString\\($bytes\\); @\\(\"BodyTemplate\",\"CssClass\",\"MessageBoxOptions\"\\) | ForEach-Object { \"$\\($_\\): $\\($text.Contains\\($_\\)\\)\" })", "PowerShell($dll = \"C:\\\\Users\\\\Fullepi\\\\.nuget\\\\packages\\\\devexpress.blazor\\\\25.1.5\\\\lib\\\\net8.0\\\\DevExpress.Blazor.v25.1.dll\"; $bytes = [System.IO.File]::ReadAllBytes\\($dll\\); $text = [System.Text.Encoding]::ASCII.GetString\\($bytes\\); @\\(\"BodyTemplate\",\"get_CssClass\",\"MessageBoxOptions\",\"TitleTemplate\"\\) | ForEach-Object { \"$\\($_\\): $\\($text.Contains\\($_\\)\\)\" })", - "PowerShell(dotnet test \"H:\\\\Applications\\\\Aycode\\\\Source\\\\AyCode.Core\\\\AyCode.Services.Tests\\\\AyCode.Services.Tests.csproj\" --filter \"FullyQualifiedName~EkaerTradeCardValidatorTests\" --nologo -v quiet 2>$null)" + "PowerShell(dotnet test \"H:\\\\Applications\\\\Aycode\\\\Source\\\\AyCode.Core\\\\AyCode.Services.Tests\\\\AyCode.Services.Tests.csproj\" --filter \"FullyQualifiedName~EkaerTradeCardValidatorTests\" --nologo -v quiet 2>$null)", + "PowerShell(dotnet build \"H:\\\\Applications\\\\Aycode\\\\Source\\\\AyCode.Core\\\\AyCode.Services.Server\\\\AyCode.Services.Server.csproj\" --nologo -v quiet 2>$null)", + "PowerShell(dotnet build \"H:\\\\Applications\\\\Aycode\\\\Source\\\\AyCode.Core\\\\AyCode.Services\\\\AyCode.Services.csproj\" -c Debug --nologo -v quiet 2>$null)" ] } } diff --git a/FruitBank.Common/FruitBankConstClient.cs b/FruitBank.Common/FruitBankConstClient.cs index 9523db92..e61eed2d 100644 --- a/FruitBank.Common/FruitBankConstClient.cs +++ b/FruitBank.Common/FruitBankConstClient.cs @@ -7,18 +7,20 @@ public static class FruitBankConstClient { public static string DefaultLocale = "en-US"; - //public static string BaseUrl = "https://localhost:59579"; //FrutiBank nop - //public static string BaseUrl = "https://localhost:44372"; //FrutiBank nop - public static string BaseUrl = "https://shop.fruitbank.hu"; //FrutiBank nop - //public static string BaseUrl = "https://fruitbank.mangoweb.hu"; //FrutiBank nop test - #if RELEASE - //public static string BaseUrl = "https://shop.fruitbank.hu"; //FrutiBank nop - #endif - - //public static string BaseUrl = "http://localhost:59579"; //FrutiBank nop - //public static string BaseUrl = "http://10.0.2.2:59579"; //FrutiBank (android) nop - //public static string BaseUrl = "https://localhost:7144"; //HybridApp - + // A nop szerver base URL-je. Induláskor a host tölti fel az appsettings "AyCode:Urls:BaseUrl"-ből + // (ld. Program.cs / MauiProgram.cs). Az fbHub ÉS a loggerHub is EBBŐL az egy értékből származik (+/fbHub, +/loggerHub). + // Default: null — ha nincs beállítva, az OLVASÁS exception-t dob, nem megy tovább csendben hiányzó/rossz URL-lel. + // A környezet-váltás az appsettings-ben történik: + // dev: https://localhost:59579 | prod: https://shop.fruitbank.hu | test: https://fruitbank.mangoweb.hu | android: http://10.0.2.2:59579 + private static string? _baseUrl; + public static string BaseUrl + { + get => !string.IsNullOrWhiteSpace(_baseUrl) + ? _baseUrl + : throw new InvalidOperationException("FruitBankConstClient.BaseUrl nincs beállítva — a host indulásakor hidratáld az appsettings 'AyCode:Urls:BaseUrl' értékéből (Program.cs / MauiProgram.cs)."); + + set => _baseUrl = value; + } public static string DefaultHubName = "fbHub"; public static string LoggerHubName = "loggerHub"; diff --git a/FruitBankHybrid.Shared/appsettings.json b/FruitBankHybrid.Shared/appsettings.json index 3687fc31..0c0a21c5 100644 --- a/FruitBankHybrid.Shared/appsettings.json +++ b/FruitBankHybrid.Shared/appsettings.json @@ -26,8 +26,7 @@ }, "AcHubConnection": { - "Url": "https://localhost:59579/fbHub", - //"Url": "https://shop.fruitbank.hu/fbHub", + // Az Url innen KIVÉVE: az fbHub és a loggerHub is az AyCode:Urls:BaseUrl-ből származik (kódban: +/fbHub, +/loggerHub). "TransportMaxBufferSize": 30000000, "ApplicationMaxBufferSize": 30000000, "CloseTimeout": "00:00:10", diff --git a/FruitBankHybrid.Web.Client/Program.cs b/FruitBankHybrid.Web.Client/Program.cs index 1cf2d9ba..6b830a65 100644 --- a/FruitBankHybrid.Web.Client/Program.cs +++ b/FruitBankHybrid.Web.Client/Program.cs @@ -18,6 +18,11 @@ using Microsoft.Extensions.Options; var builder = WebAssemblyHostBuilder.CreateDefault(args); +// Hub-URL-ek EGY forrásból: az fbHub és a loggerHub is az AyCode:Urls:BaseUrl-ből származik. +// A loggerHub writer a FruitBankConstClient.BaseUrl-t olvassa, ezért induláskor onnan hidratáljuk. +FruitBankConstClient.BaseUrl = builder.Configuration["AyCode:Urls:BaseUrl"] + ?? throw new InvalidOperationException("Hiányzik az 'AyCode:Urls:BaseUrl' az appsettings-ből — a hub-ok URL-je ebből származik."); + builder.Services.AddDevExpressBlazor(configure => configure.SizeMode = DevExpress.Blazor.SizeMode.Medium); // Add device-specific services used by the FruitBankHybrid.Shared project @@ -32,7 +37,12 @@ builder.Services.AddSingleton(sp => new LoggedInModel(sp.GetRequi // Bind SignalR options from wwwroot/appsettings.json (loaded automatically by WebAssemblyHostBuilder) — // single Configure call per options type, combining section Bind with runtime overrides. -builder.Services.Configure(opts => builder.Configuration.GetSection("AcHubConnection").Bind(opts)); +builder.Services.Configure(opts => +{ + builder.Configuration.GetSection("AcHubConnection").Bind(opts); + // Az fbHub URL a közös BaseUrl-ből (nem külön AcHubConnection:Url) — így nem tud eltérni a loggerHub-tól. + opts.Url = $"{FruitBankConstClient.BaseUrl}/{FruitBankConstClient.DefaultHubName}"; +}); builder.Services.Configure(opts => { diff --git a/FruitBankHybrid.Web.Client/wwwroot/appsettings.json b/FruitBankHybrid.Web.Client/wwwroot/appsettings.json index 3687fc31..0c0a21c5 100644 --- a/FruitBankHybrid.Web.Client/wwwroot/appsettings.json +++ b/FruitBankHybrid.Web.Client/wwwroot/appsettings.json @@ -26,8 +26,7 @@ }, "AcHubConnection": { - "Url": "https://localhost:59579/fbHub", - //"Url": "https://shop.fruitbank.hu/fbHub", + // Az Url innen KIVÉVE: az fbHub és a loggerHub is az AyCode:Urls:BaseUrl-ből származik (kódban: +/fbHub, +/loggerHub). "TransportMaxBufferSize": 30000000, "ApplicationMaxBufferSize": 30000000, "CloseTimeout": "00:00:10", diff --git a/FruitBankHybrid.Web/Program.cs b/FruitBankHybrid.Web/Program.cs index 05d85dff..ad1a231c 100644 --- a/FruitBankHybrid.Web/Program.cs +++ b/FruitBankHybrid.Web/Program.cs @@ -17,6 +17,10 @@ using Microsoft.Extensions.Options; var builder = WebApplication.CreateBuilder(args); +// Hub-URL-ek EGY forrásból: az fbHub és a loggerHub is az AyCode:Urls:BaseUrl-ből származik. +FruitBankConstClient.BaseUrl = builder.Configuration["AyCode:Urls:BaseUrl"] + ?? throw new InvalidOperationException("Hiányzik az 'AyCode:Urls:BaseUrl' az appsettings-ből — a hub-ok URL-je ebből származik."); + builder.Services.AddRazorComponents().AddInteractiveWebAssemblyComponents(); builder.Services.AddDevExpressBlazor(configure => configure.SizeMode = DevExpress.Blazor.SizeMode.Medium); builder.Services.AddMvc(); @@ -36,7 +40,12 @@ builder.Services.AddSingleton(sp => new LoggedInModel(sp.GetRequi // Bind SignalR options from appsettings.json — single Configure call per options type. // The lambda runs the appsettings Bind first, then any runtime overrides (e.g. the WASM safety net). -builder.Services.Configure(opts => builder.Configuration.GetSection("AcHubConnection").Bind(opts)); +builder.Services.Configure(opts => +{ + builder.Configuration.GetSection("AcHubConnection").Bind(opts); + // Az fbHub URL a közös BaseUrl-ből (nem külön AcHubConnection:Url) — így nem tud eltérni a loggerHub-tól. + opts.Url = $"{FruitBankConstClient.BaseUrl}/{FruitBankConstClient.DefaultHubName}"; +}); builder.Services.Configure(opts => { diff --git a/FruitBankHybrid.Web/appsettings.json b/FruitBankHybrid.Web/appsettings.json index 3687fc31..0c0a21c5 100644 --- a/FruitBankHybrid.Web/appsettings.json +++ b/FruitBankHybrid.Web/appsettings.json @@ -26,8 +26,7 @@ }, "AcHubConnection": { - "Url": "https://localhost:59579/fbHub", - //"Url": "https://shop.fruitbank.hu/fbHub", + // Az Url innen KIVÉVE: az fbHub és a loggerHub is az AyCode:Urls:BaseUrl-ből származik (kódban: +/fbHub, +/loggerHub). "TransportMaxBufferSize": 30000000, "ApplicationMaxBufferSize": 30000000, "CloseTimeout": "00:00:10", diff --git a/FruitBankHybrid/MauiProgram.cs b/FruitBankHybrid/MauiProgram.cs index 24f7c1f0..9002c470 100644 --- a/FruitBankHybrid/MauiProgram.cs +++ b/FruitBankHybrid/MauiProgram.cs @@ -1,6 +1,7 @@ using AyCode.Core.Enums; using AyCode.Core.Loggers; using AyCode.Services.SignalRs; +using FruitBank.Common; using FruitBank.Common.Loggers; using FruitBank.Common.Models; using FruitBank.Common.Services; @@ -46,6 +47,10 @@ namespace FruitBankHybrid } } + // Hub-URL-ek EGY forrásból: az fbHub és a loggerHub is az AyCode:Urls:BaseUrl-ből származik. + FruitBankConstClient.BaseUrl = builder.Configuration["AyCode:Urls:BaseUrl"] + ?? throw new InvalidOperationException("Hiányzik az 'AyCode:Urls:BaseUrl' az appsettings-ből — a hub-ok URL-je ebből származik."); + #if DEBUG builder.Services.AddSingleton(); #endif @@ -59,7 +64,12 @@ namespace FruitBankHybrid // Bind SignalR options from configuration. // Precedence: code default → appsettings.json (this line) → any later Configure action. - builder.Services.Configure(builder.Configuration.GetSection("AcHubConnection")); + builder.Services.Configure(opts => + { + builder.Configuration.GetSection("AcHubConnection").Bind(opts); + // Az fbHub URL a közös BaseUrl-ből (nem külön AcHubConnection:Url) — így nem tud eltérni a loggerHub-tól. + opts.Url = $"{FruitBankConstClient.BaseUrl}/{FruitBankConstClient.DefaultHubName}"; + }); builder.Services.Configure(builder.Configuration.GetSection("AcBinaryHubProtocol")); // Add device-specific services used by the FruitBankHybrid.Shared project