This commit is contained in:
6d486f49
2026-08-14 15:56:17 -04:00
parent af64b9e95c
commit 09a8adfc4a
827 changed files with 65045 additions and 71849 deletions
@@ -0,0 +1,69 @@
namespace Web.Services;
using Microsoft.JSInterop;
public class NetworkStatusService : IAsyncDisposable, IDisposable
{
private readonly IJSRuntime _jsRuntime;
private DotNetObjectReference<NetworkStatusService>? _dotNetRef;
private bool _isOnline = true;
private bool _initialized;
public event Action<bool>? StatusChanged;
public bool IsOnline => _isOnline;
public NetworkStatusService(IJSRuntime jsRuntime)
{
_jsRuntime = jsRuntime;
}
public async Task InitializeAsync()
{
if (_initialized) return;
_initialized = true;
try
{
_dotNetRef = DotNetObjectReference.Create(this);
_isOnline = await _jsRuntime.InvokeAsync<bool>("networkStatus.initialize", _dotNetRef);
StatusChanged?.Invoke(_isOnline);
}
catch (Exception ex)
{
Console.WriteLine($"[NetworkStatusService] Failed to initialize: {ex.Message}");
}
}
[JSInvokable]
public void SetOnlineStatus(bool isOnline)
{
if (_isOnline != isOnline)
{
_isOnline = isOnline;
StatusChanged?.Invoke(_isOnline);
}
}
public void Dispose()
{
_dotNetRef?.Dispose();
_dotNetRef = null;
}
public async ValueTask DisposeAsync()
{
if (_dotNetRef != null)
{
try
{
await _jsRuntime.InvokeVoidAsync("networkStatus.dispose");
}
catch
{
// Ignore disposal errors
}
_dotNetRef.Dispose();
}
}
}