From 1fc07ca194f77a34b203e32aba9e07c19e1ecf9f Mon Sep 17 00:00:00 2001 From: Pat Hartl Date: Thu, 26 Jan 2023 00:29:00 -0600 Subject: [PATCH] Have server broadcast its address to the local network for easy sign in --- .../LANCommander.PlaynitePlugin.csproj | 3 ++ .../Views/Authentication.xaml.cs | 19 +++++++++- .../packages.config | 2 ++ LANCommander/LANCommander.csproj | 1 + LANCommander/Models/Settings.cs | 1 + LANCommander/Program.cs | 4 +++ LANCommander/Services/BeaconService.cs | 35 +++++++++++++++++++ 7 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 LANCommander/Services/BeaconService.cs diff --git a/LANCommander.Playnite.Extension/LANCommander.PlaynitePlugin.csproj b/LANCommander.Playnite.Extension/LANCommander.PlaynitePlugin.csproj index 7bec324..2d33279 100644 --- a/LANCommander.Playnite.Extension/LANCommander.PlaynitePlugin.csproj +++ b/LANCommander.Playnite.Extension/LANCommander.PlaynitePlugin.csproj @@ -31,6 +31,9 @@ 4 + + ..\packages\rix0rrr.BeaconLib.1.0.2\lib\net40\BeaconLib.dll + ..\packages\SharpZipLib.1.4.1\lib\netstandard2.0\ICSharpCode.SharpZipLib.dll diff --git a/LANCommander.Playnite.Extension/Views/Authentication.xaml.cs b/LANCommander.Playnite.Extension/Views/Authentication.xaml.cs index ca0d57a..02cfbe7 100644 --- a/LANCommander.Playnite.Extension/Views/Authentication.xaml.cs +++ b/LANCommander.Playnite.Extension/Views/Authentication.xaml.cs @@ -1,4 +1,5 @@ -using LANCommander.SDK.Models; +using BeaconLib; +using LANCommander.SDK.Models; using Playnite.SDK; using System; using System.Collections.Generic; @@ -27,6 +28,22 @@ namespace LANCommander.PlaynitePlugin.Views Plugin = plugin; InitializeComponent(); + + var probe = new Probe("LANCommander"); + + probe.BeaconsUpdated += beacons => Dispatcher.BeginInvoke((System.Action)(() => + { + var beacon = beacons.First(); + + Context.ServerAddress = $"http://{beacon.Address.Address}:{beacon.Address.Port}"; + + this.ServerAddress.Text = Context.ServerAddress; + + probe.Stop(); + })); + + probe.Start(); + } private void TextBox_KeyDown(object sender, KeyEventArgs e) diff --git a/LANCommander.Playnite.Extension/packages.config b/LANCommander.Playnite.Extension/packages.config index 2728830..f1e1db6 100644 --- a/LANCommander.Playnite.Extension/packages.config +++ b/LANCommander.Playnite.Extension/packages.config @@ -1,9 +1,11 @@  + + diff --git a/LANCommander/LANCommander.csproj b/LANCommander/LANCommander.csproj index 4b3d345..5ec6ca2 100644 --- a/LANCommander/LANCommander.csproj +++ b/LANCommander/LANCommander.csproj @@ -38,6 +38,7 @@ runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/LANCommander/Models/Settings.cs b/LANCommander/Models/Settings.cs index 0674bbd..c37efc0 100644 --- a/LANCommander/Models/Settings.cs +++ b/LANCommander/Models/Settings.cs @@ -3,6 +3,7 @@ public class LANCommanderSettings { public int Port { get; set; } + public bool Beacon { get; set; } public string TokenSecret { get; set; } public int TokenLifetime { get; set; } public string DatabaseConnectionString { get; set; } diff --git a/LANCommander/Program.cs b/LANCommander/Program.cs index b35af41..7db6aea 100644 --- a/LANCommander/Program.cs +++ b/LANCommander/Program.cs @@ -1,3 +1,4 @@ +using BeaconLib; using LANCommander.Data; using LANCommander.Data.Models; using LANCommander.Services; @@ -77,6 +78,9 @@ builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); +if (settings.Beacon) + builder.Services.AddHostedService(); + var app = builder.Build(); // Configure the HTTP request pipeline. diff --git a/LANCommander/Services/BeaconService.cs b/LANCommander/Services/BeaconService.cs new file mode 100644 index 0000000..250c9b5 --- /dev/null +++ b/LANCommander/Services/BeaconService.cs @@ -0,0 +1,35 @@ +using BeaconLib; +using LANCommander.Models; + +namespace LANCommander.Services +{ + public class BeaconService : IHostedService, IDisposable + { + private Beacon Beacon; + private LANCommanderSettings Settings; + + public BeaconService() { + Settings = SettingService.GetSettings(); + Beacon = new Beacon("LANCommander", Convert.ToUInt16(Settings.Port)); + } + + public void Dispose() + { + Beacon?.Dispose(); + } + + public Task StartAsync(CancellationToken cancellationToken) + { + Beacon.BeaconData = "Acknowledged HQ"; + Beacon.Start(); + + return Task.CompletedTask; + } + + public Task StopAsync(CancellationToken cancellationToken) + { + Beacon.Stop(); + return Task.CompletedTask; + } + } +}