LANCommander/LANCommander.Server.Services/IPXRelayService.cs

77 lines
2 KiB
C#
Raw Permalink Normal View History

2023-09-08 22:26:28 -05:00
using IPXRelayDotNet;
using Microsoft.Extensions.Logging;
2023-09-08 22:26:28 -05:00
2024-08-04 18:44:33 -05:00
namespace LANCommander.Server.Services
2023-09-08 22:26:28 -05:00
{
public class IPXRelayService : BaseService
{
2025-03-07 01:03:14 -06:00
private CancellationTokenSource? _relayCts;
private Task? _relayTask;
private IPXRelay? _relay;
2023-09-08 22:26:28 -05:00
public IPXRelayService(ILogger<IPXRelayService> logger, SettingsProvider<Settings.Settings> settingsProvider) : base(logger, settingsProvider)
2023-09-08 22:26:28 -05:00
{
2025-03-09 01:51:17 -06:00
Init(logger);
2023-09-08 22:26:28 -05:00
}
2025-03-09 01:51:17 -06:00
public void Init(ILogger logger)
2023-09-08 22:26:28 -05:00
{
2025-03-07 01:03:14 -06:00
StopAsync().Wait();
2023-09-08 22:26:28 -05:00
_relay = new IPXRelay(_settingsProvider.CurrentValue.Server.IPXRelay.Port, logger);
2023-09-08 22:26:28 -05:00
if (!_settingsProvider.CurrentValue.Server.IPXRelay.Logging)
2025-03-07 01:03:14 -06:00
_relay.DisableLogging();
if (_settingsProvider.CurrentValue.Server.IPXRelay.Enabled)
2025-03-07 01:03:14 -06:00
{
_relayCts = new CancellationTokenSource();
_relayTask = Task.Run(async () =>
{
try
{
await _relay.StartAsync(_relayCts.Token);
}
catch (OperationCanceledException)
{
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to start IPX Relay");
}
}, _relayCts.Token);
}
2023-09-08 22:26:28 -05:00
}
2025-03-07 01:03:14 -06:00
public async Task StopAsync()
2023-09-08 22:26:28 -05:00
{
2025-03-07 01:03:14 -06:00
if (_relayCts != null)
{
try
{
_relayCts.CancelAsync();
}
catch (OperationCanceledException)
{
}
finally
{
_relayCts.Dispose();
_relayCts = null;
}
}
2023-09-08 22:26:28 -05:00
try
{
_relay?.Stop();
_relay = null;
}
finally
{
}
2023-09-08 22:26:28 -05:00
}
}
}