using System.Net; using System.Net.NetworkInformation; using System.Net.Sockets; using System.Threading.Channels; namespace DotNetDDI.Services.Dhcp; public class DhcpLeaseQueue { private readonly Channel _pipe; private readonly ChannelReader _reader; private readonly ChannelWriter _writer; public ref readonly ChannelReader Reader => ref _reader; public DhcpLeaseQueue() { _pipe = Channel.CreateUnbounded(); _reader = _pipe.Reader; _writer = _pipe.Writer; } public ValueTask Write(DhcpLeaseChange change, CancellationToken cancellationToken = default) { return _writer.WriteAsync(change, cancellationToken); } } public readonly record struct DhcpLeaseChange(IPAddress Address, string FQDN, DhcpLeaseIdentifier Identifier, TimeSpan Lifetime) { public AddressFamily LeaseType { get; } = Address.AddressFamily; } public record DhcpLeaseIdentifier; public record DhcpLeaseClientIdentifier(string ClientId) : DhcpLeaseIdentifier; public record DhcpLeaseHWAddrIdentifier(PhysicalAddress HWAddr) : DhcpLeaseIdentifier;