Files
ChronoCCG/Chrono/Web/Services/NetworkStatusService.cs
T
6d486f49 09a8adfc4a Test
2026-08-14 17:19:24 -04:00

70 lines
1.6 KiB
C#

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();
}
}
}