@using BeaconLib
@using LANCommander.Launcher.Models
@using LANCommander.SDK.Models
@using ListItem = AntDesign.ListItem
@inject NavigationManager NavigationManager
@inject SDK.Client Client
@inject AuthenticationService AuthenticationService
Connect
@if (BeaconActive)
{
}
else
{
}
@code {
[Parameter] public EventCallback OnSelected { get; set; }
bool BeaconActive = false;
bool OfflineModeAvailable = false;
string ServerAddress = String.Empty;
AuthRequest Model = new();
List DiscoveredServers = new();
Models.Settings Settings = SettingService.GetSettings();
Probe Probe;
protected override async Task OnInitializedAsync()
{
OfflineModeAvailable = await AuthenticationService.OfflineModeAvailableAsync();
ActivateBeacon();
}
async Task SelectServer(string serverAddress)
{
Probe.Stop();
Probe.Dispose();
BeaconActive = false;
if (OnSelected.HasDelegate)
await OnSelected.InvokeAsync(serverAddress);
await InvokeAsync(StateHasChanged);
}
async Task ActivateBeacon()
{
Probe = new Probe("LANCommander");
Probe.BeaconsUpdated += (beacons) =>
{
foreach (var beacon in beacons)
{
if (!String.IsNullOrWhiteSpace(beacon.Data))
{
var server = new DiscoveredServer(beacon.Data, beacon.Address);
if (!DiscoveredServers.Any(s => s.Address.ToString() == server.Address.ToString()))
DiscoveredServers.Add(server);
}
}
};
BeaconActive = true;
Probe.Start();
await Task.Delay(10000);
Probe.Stop();
Probe.Dispose();
BeaconActive = false;
await InvokeAsync(StateHasChanged);
}
}