diff --git a/src/pdns-dhcp/Kea/KeaLeaseWatcher.cs b/src/pdns-dhcp/Kea/KeaLeaseWatcher.cs index 6ea3b9e..7107a46 100644 --- a/src/pdns-dhcp/Kea/KeaLeaseWatcher.cs +++ b/src/pdns-dhcp/Kea/KeaLeaseWatcher.cs @@ -2,22 +2,54 @@ using Microsoft.Extensions.Hosting; using pdns_dhcp.Options; -using Stl.IO; - namespace pdns_dhcp.Kea; public abstract class KeaDhcpLeaseWatcher : BackgroundService { - private readonly FileSystemWatcher fsw; + private readonly FileSystemWatcher _fsw; protected KeaDhcpServerOptions Options { get; } protected KeaDhcpLeaseWatcher(KeaDhcpServerOptions options) { Options = options; + var leases = options.Leases.AsSpan(); + if (leases.IsWhiteSpace()) + { + throw new ArgumentException($"{nameof(options.Leases)} must not be empty.", nameof(options)); + } + + var leaseFile = Path.GetFileName(leases); + var leaseDirectory = Path.GetDirectoryName(leases).ToString(); + if (!Directory.Exists(leaseDirectory)) + { + throw new ArgumentException($"{nameof(options.Leases)} must point to a file in an existing path.", nameof(options)); + } + + _fsw = new(leaseDirectory, leaseFile.ToString()); + _fsw.Changed += OnLeaseChanged; + _fsw.Created += OnLeaseChanged; + _fsw.Deleted += OnLeaseChanged; + _fsw.Renamed += OnLeaseRenamed; + _fsw.Error += OnLeaseError; } protected override Task ExecuteAsync(CancellationToken stoppingToken) + { + return Task.CompletedTask; + } + + private void OnLeaseChanged(object sender, FileSystemEventArgs e) + { + throw new NotImplementedException(); + } + + private void OnLeaseError(object sender, ErrorEventArgs e) + { + throw new NotImplementedException(); + } + + private void OnLeaseRenamed(object sender, RenamedEventArgs e) { throw new NotImplementedException(); } diff --git a/src/pdns-dhcp/Options/PowerDnsOptions.cs b/src/pdns-dhcp/Options/PowerDnsOptions.cs index a93ac29..6873dc7 100644 --- a/src/pdns-dhcp/Options/PowerDnsOptions.cs +++ b/src/pdns-dhcp/Options/PowerDnsOptions.cs @@ -1,8 +1,8 @@ namespace pdns_dhcp.Options; -public class PowerDnsOptions +public class PowerDnsOptions(PowerDnsListenerOptions listener) { - public PowerDnsListenerOptions Listener { get; set; } + public PowerDnsListenerOptions Listener { get; } = listener; } public class PowerDnsListenerOptions(string socket) diff --git a/src/pdns-dhcp/pdns-dhcp.csproj b/src/pdns-dhcp/pdns-dhcp.csproj index 8c83b65..82a08c7 100644 --- a/src/pdns-dhcp/pdns-dhcp.csproj +++ b/src/pdns-dhcp/pdns-dhcp.csproj @@ -13,8 +13,8 @@ - - + + \ No newline at end of file