Test
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user