diff --git a/LANCommander.Playnite.Extension/LANCommander.PlaynitePlugin.csproj b/LANCommander.Playnite.Extension/LANCommander.PlaynitePlugin.csproj
index 7bec324e..2d33279a 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 ca0d57a9..02cfbe7b 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 27288308..f1e1db69 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 4b3d345b..5ec6ca2d 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 0674bbd9..c37efc04 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 b35af41c..7db6aead 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 00000000..250c9b58
--- /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;
+ }
+ }
+}