Allow customization of the address that gets broadcast by the beacon

media
Pat Hartl 2023-10-30 18:45:11 -05:00
parent fd3f6c24b1
commit 8c61a7e3b5
7 changed files with 63 additions and 10 deletions

View File

@ -40,6 +40,9 @@ namespace LANCommander.PlaynitePlugin.Views
{
var beacon = beacons.First();
if (!String.IsNullOrWhiteSpace(beacon.Data) && Uri.TryCreate(beacon.Data, UriKind.Absolute, out var beaconUri))
Context.ServerAddress = beaconUri.ToString();
else
Context.ServerAddress = $"http://{beacon.Address.Address}:{beacon.Address.Port}";
this.ServerAddress.Text = Context.ServerAddress;

View File

@ -9,18 +9,24 @@
public class LANCommanderSettings
{
public int Port { get; set; } = 1337;
public bool Beacon { get; set; } = true;
public string DatabaseConnectionString { get; set; } = "Data Source=LANCommander.db;Cache=Shared";
public string IGDBClientId { get; set; } = "";
public string IGDBClientSecret { get; set; } = "";
public LANCommanderTheme Theme { get; set; } = LANCommanderTheme.Light;
public LANCommanderBeaconSettings Beacon { get; set; } = new LANCommanderBeaconSettings();
public LANCommanderAuthenticationSettings Authentication { get; set; } = new LANCommanderAuthenticationSettings();
public LANCommanderUserSaveSettings UserSaves { get; set; } = new LANCommanderUserSaveSettings();
public LANCommanderArchiveSettings Archives { get; set; } = new LANCommanderArchiveSettings();
public LANCommanderIPXRelaySettings IPXRelay { get; set; } = new LANCommanderIPXRelaySettings();
}
public class LANCommanderBeaconSettings
{
public bool Enabled { get; set; } = true;
public string Address { get; set; } = "";
}
public class LANCommanderAuthenticationSettings
{
public bool RequireApproval { get; set; } = false;

View File

@ -0,0 +1,49 @@
@page "/Settings/Beacon"
@using LANCommander.Models;
@layout SettingsLayout
@inject SettingService SettingService
@inject IPXRelayService IPXRelayService
@inject IMessageService MessageService
@attribute [Authorize(Roles = "Administrator")]
<PageHeader Title="Beacon" />
<div style="padding: 0 24px;">
<Form Model="Settings" Layout="@FormLayout.Vertical">
<FormItem Label="Enable">
<Text Type="@TextElementType.Secondary">Enabling the beacon will allow clients on the same network to auto-discover the LANCommander address.</Text>
<Switch @bind-Checked="context.Beacon.Enabled" />
</FormItem>
<FormItem Label="Address">
<Text Type="@TextElementType.Secondary">Use this to customize the address that is broadcasted to clients. Default: http://&lt;Server IP&gt;:@context.Port</Text>
<Input @bind-Value="Settings.Beacon.Address" />
</FormItem>
<FormItem>
<Button OnClick="Save" Type="@ButtonType.Primary">Save</Button>
</FormItem>
</Form>
</div>
@code {
LANCommanderSettings Settings;
protected override async Task OnInitializedAsync()
{
Settings = SettingService.GetSettings();
}
private void Save()
{
try
{
SettingService.SaveSettings(Settings);
MessageService.Success("Settings saved!");
}
catch
{
MessageService.Error("An unknown error occurred.");
}
}
}

View File

@ -12,12 +12,6 @@
<div style="padding: 0 24px;">
<Form Model="Settings" Layout="@FormLayout.Vertical">
<FormItem Label="Beacon">
<Switch @bind-Checked="context.Beacon" />
</FormItem>
<Text Type="@TextElementType.Secondary">Enabling the beacon will allow clients on the same network to auto-discover the LANCommander address.</Text>
<FormItem Label="Theme">
<Select @bind-Value="context.Theme" TItem="LANCommanderTheme" TItemValue="LANCommanderTheme" DataSource="Enum.GetValues<LANCommanderTheme>()">
<LabelTemplate Context="Value">@Value.GetDisplayName()</LabelTemplate>

View File

@ -11,6 +11,7 @@
<MenuItem RouterLink="/Settings/UserSaves">User Saves</MenuItem>
<MenuItem RouterLink="/Settings/Archives">Archives</MenuItem>
<MenuItem RouterLink="/Settings/IPXRelay">IPX Relay</MenuItem>
<MenuItem RouterLink="/Settings/Beacon">Beacon</MenuItem>
<MenuItem RouterLink="/Settings/Tools" RouterMatch="@NavLinkMatch.Prefix">Tools</MenuItem>
</Menu>
</Sider>

View File

@ -146,7 +146,7 @@ namespace LANCommander
builder.Services.AddSingleton<ServerProcessService>();
builder.Services.AddSingleton<IPXRelayService>();
if (settings.Beacon)
if (settings.Beacon?.Enabled ?? false)
{
Logger.Debug("The beacons have been lit! LANCommander calls for players!");
builder.Services.AddHostedService<BeaconService>();

View File

@ -20,7 +20,7 @@ namespace LANCommander.Services
public Task StartAsync(CancellationToken cancellationToken)
{
Beacon.BeaconData = "Acknowledged HQ";
Beacon.BeaconData = Settings.Beacon?.Address;
Beacon.Start();
return Task.CompletedTask;