using Microsoft.JSInterop; using System.Collections.Generic; namespace cwebplusApp.Shared.Services { public class OnlineStatusProvider { public bool Online { get => online; } public delegate void OnlineStatusChangeCallBack(bool online); public IJSRuntime JSRuntime { get; set; } private bool online; private HashSet OnlineStatusChangeCallBacks; public OnlineStatusProvider(IJSRuntime _jSRuntime) { this.JSRuntime = _jSRuntime; this.OnlineStatusChangeCallBacks = new(); var dotNetObjRef = DotNetObjectReference.Create(this); JSRuntime.InvokeVoidAsync("registerOnlineStatusHandler", dotNetObjRef); } [JSInvokable] public void SetOnlineStatus(bool _online) { this.online = _online; foreach (OnlineStatusChangeCallBack OnlineStatusCallBack in this.OnlineStatusChangeCallBacks) { OnlineStatusCallBack?.Invoke(this.online); } } public void AddOnlineStatusChangeCallBack(OnlineStatusChangeCallBack listener) { this.OnlineStatusChangeCallBacks.Add(listener); } public void RemoveOnlineStatusChangeCallBack(OnlineStatusChangeCallBack listener) { this.OnlineStatusChangeCallBacks.Remove(listener); } } }