diff --git a/src/pdns-dhcp/PowerDns/Methods.cs b/src/pdns-dhcp/PowerDns/Methods.cs index fb77cd9..a9e882e 100644 --- a/src/pdns-dhcp/PowerDns/Methods.cs +++ b/src/pdns-dhcp/PowerDns/Methods.cs @@ -8,12 +8,17 @@ public interface IMethod public abstract static string Method { get; } } -public abstract class Method where TSelf : Method, IMethod +[JsonPolymorphic(TypeDiscriminatorPropertyName = "method")] +[JsonDerivedType(typeof(InitializeMethod), "initialize")] +[JsonDerivedType(typeof(LookupMethod), "lookup")] +public abstract class Method { [JsonExtensionData] public Dictionary ExtensionData { get; } = []; } +public abstract class Method : Method where TSelf : Method, IMethod; + public abstract class Method(TParam parameters) : Method where TSelf : Method, IMethod { public TParam Parameters => parameters; diff --git a/src/pdns-dhcp/PowerDns/PowerDnsStreamClient.cs b/src/pdns-dhcp/PowerDns/PowerDnsStreamClient.cs index 623a85a..d38d782 100644 --- a/src/pdns-dhcp/PowerDns/PowerDnsStreamClient.cs +++ b/src/pdns-dhcp/PowerDns/PowerDnsStreamClient.cs @@ -38,8 +38,11 @@ public class PowerDnsStreamClient : IDisposable other.Cancel(); } - private Task Run(CancellationToken stoppingToken) + private async Task Run(CancellationToken stoppingToken) { - return Task.CompletedTask; + while (!stoppingToken.IsCancellationRequested) + { + await JsonSerializer.DeserializeAsync(_stream, cancellationToken: stoppingToken); + } } }