From 358af9c507df736b9b71f86cb9d567859794accc Mon Sep 17 00:00:00 2001 From: github-actions Date: Sat, 11 Jan 2025 20:36:16 +0000 Subject: [PATCH] update API list Smdn.Net.EchonetLite-2.0.0 --- .../Smdn.Net.EchonetLite-net6.0.apilist.cs | 376 ------------------ .../Smdn.Net.EchonetLite-net8.0.apilist.cs | 188 +++++---- ....Net.EchonetLite-netstandard2.1.apilist.cs | 185 +++++---- 3 files changed, 221 insertions(+), 528 deletions(-) delete mode 100644 doc/api-list/Smdn.Net.EchonetLite/Smdn.Net.EchonetLite-net6.0.apilist.cs diff --git a/doc/api-list/Smdn.Net.EchonetLite/Smdn.Net.EchonetLite-net6.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite/Smdn.Net.EchonetLite-net6.0.apilist.cs deleted file mode 100644 index 49d29b7..0000000 --- a/doc/api-list/Smdn.Net.EchonetLite/Smdn.Net.EchonetLite-net6.0.apilist.cs +++ /dev/null @@ -1,376 +0,0 @@ -// Smdn.Net.EchonetLite.dll (Smdn.Net.EchonetLite-2.0.0-preview2) -// Name: Smdn.Net.EchonetLite -// AssemblyVersion: 2.0.0.0 -// InformationalVersion: 2.0.0-preview2+60a8ce3520b765b1bcab669a662cfb615f41a1f5 -// TargetFramework: .NETCoreApp,Version=v6.0 -// Configuration: Release -// Referenced assemblies: -// Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 -// Smdn.Net.EchonetLite.Primitives, Version=2.0.0.0, Culture=neutral -// System.Collections, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -// System.Collections.Concurrent, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -// System.ComponentModel.Primitives, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -// System.Linq, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -// System.Memory, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 -// System.Net.NetworkInformation, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -// System.Net.Primitives, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -// System.Net.Sockets, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -// System.ObjectModel, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -// System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -// System.Threading, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -#nullable enable annotations - -using System; -using System.Buffers; -using System.Collections.Generic; -using System.Collections.Specialized; -using System.ComponentModel; -using System.Diagnostics.CodeAnalysis; -using System.Net; -using System.Threading; -using System.Threading.Tasks; -using Microsoft.Extensions.Logging; -using Smdn.Net.EchonetLite; -using Smdn.Net.EchonetLite.ComponentModel; -using Smdn.Net.EchonetLite.ObjectModel; -using Smdn.Net.EchonetLite.Protocol; -using Smdn.Net.EchonetLite.Transport; - -namespace Smdn.Net.EchonetLite { - public interface IEchonetDeviceFactory { - EchonetDevice? Create(byte classGroupCode, byte classCode, byte instanceCode); - } - - public enum EchonetServicePropertyResult : int { - Accepted = 1, - NotAccepted = 2, - Unavailable = 0, - } - - public class EchonetClient : - IAsyncDisposable, - IDisposable - { - public event EventHandler? InstanceListUpdated; - public event EventHandler? InstanceListUpdating; - public event EventHandler? NodeJoined; - public event EventHandler? PropertyMapAcquired; - public event EventHandler? PropertyMapAcquiring; - - public EchonetClient(EchonetNode selfNode, IEchonetLiteHandler echonetLiteHandler, bool shouldDisposeEchonetLiteHandler, IEchonetDeviceFactory? deviceFactory, ILogger? logger) {} - public EchonetClient(IEchonetLiteHandler echonetLiteHandler, ILogger? logger = null) {} - public EchonetClient(IEchonetLiteHandler echonetLiteHandler, bool shouldDisposeEchonetLiteHandler, ILogger? logger) {} - - public IReadOnlyCollection OtherNodes { get; } - public EchonetNode SelfNode { get; } - public TaskFactory? ServiceHandlerTaskFactory { get; set; } - public ISynchronizeInvoke? SynchronizingObject { get; set; } - - public async ValueTask AcquirePropertyMapsAsync(EchonetObject device, IEnumerable? extraPropertyCodes = null, CancellationToken cancellationToken = default) {} - protected virtual void Dispose(bool disposing) {} - public void Dispose() {} - public async ValueTask DisposeAsync() {} - protected virtual async ValueTask DisposeAsyncCore() {} - internal protected IPAddress? GetSelfNodeAddress() {} - protected void InvokeEvent(object? sender, EventHandler? eventHandler, TEventArgs e) {} - public async ValueTask NotifyAsync(EOJ sourceObject, IEnumerable properties, IPAddress destinationNodeAddress, EOJ destinationObject, CancellationToken cancellationToken = default) {} - public async ValueTask NotifyInstanceListAsync(CancellationToken cancellationToken = default) {} - public ValueTask NotifyOneWayAsync(EOJ sourceObject, IEnumerable properties, IPAddress? destinationNodeAddress, EOJ destinationObject, CancellationToken cancellationToken = default) {} - protected virtual void OnInstanceListUpdated(EchonetNode node) {} - protected virtual void OnInstanceListUpdating(EchonetNode node) {} - protected virtual void OnNodeJoined(EchonetNode node) {} - protected virtual void OnPropertyMapAcquired(EchonetObject device) {} - protected virtual void OnPropertyMapAcquiring(EchonetObject device) {} - public ValueTask RequestNotifyInstanceListAsync(IPAddress? destinationNodeAddress = null, CancellationToken cancellationToken = default) {} - public async Task RequestNotifyInstanceListAsync(IPAddress? destinationNodeAddress, Func onInstanceListUpdated, TState state, CancellationToken cancellationToken = default) {} - public ValueTask RequestNotifyOneWayAsync(EOJ sourceObject, IPAddress? destinationNodeAddress, EOJ destinationObject, IEnumerable propertyCodes, CancellationToken cancellationToken = default) {} - public async ValueTask RequestReadAsync(EOJ sourceObject, IPAddress? destinationNodeAddress, EOJ destinationObject, IEnumerable propertyCodes, CancellationToken cancellationToken = default) {} - public async ValueTask RequestWriteAsync(EOJ sourceObject, IPAddress? destinationNodeAddress, EOJ destinationObject, IEnumerable properties, CancellationToken cancellationToken = default) {} - public async ValueTask RequestWriteOneWayAsync(EOJ sourceObject, IPAddress? destinationNodeAddress, EOJ destinationObject, IEnumerable properties, CancellationToken cancellationToken = default) {} - public async ValueTask<(EchonetServiceResponse SetResponse, EchonetServiceResponse GetResponse)> RequestWriteReadAsync(EOJ sourceObject, IPAddress? destinationNodeAddress, EOJ destinationObject, IEnumerable propertiesToSet, IEnumerable propertyCodesToGet, CancellationToken cancellationToken = default) {} - void IEventInvoker.InvokeEvent(object? sender, EventHandler? eventHandler, TEventArgs e) {} - protected void ThrowIfDisposed() {} - } - - public class EchonetDevice : EchonetObject { - public EchonetDevice(byte classGroupCode, byte classCode, byte instanceCode) {} - - public override byte ClassCode { get; } - public override byte ClassGroupCode { get; } - public override bool HasPropertyMapAcquired { get; } - public override byte InstanceCode { get; } - public override IReadOnlyDictionary Properties { get; } - - protected virtual EchonetProperty CreateProperty(byte propertyCode) {} - protected virtual EchonetProperty CreateProperty(byte propertyCode, bool canSet, bool canGet, bool canAnnounceStatusChange) {} - } - - public abstract class EchonetNode { - public static EchonetNode CreateSelfNode(EchonetObject nodeProfile, IEnumerable devices) {} - public static EchonetNode CreateSelfNode(IEnumerable devices) {} - - public event EventHandler? DevicesChanged; - - public abstract IPAddress Address { get; } - public abstract IReadOnlyCollection Devices { get; } - public EchonetObject NodeProfile { get; } - } - - public abstract class EchonetObject { - public static EchonetObject Create(IEchonetObjectSpecification objectDetail, byte instanceCode) {} - public static EchonetObject CreateNodeProfile(bool transmissionOnly = false) {} - - public event EventHandler? PropertiesChanged; - - public abstract byte ClassCode { get; } - public abstract byte ClassGroupCode { get; } - protected virtual IEventInvoker EventInvoker { get; } - public abstract bool HasPropertyMapAcquired { get; } - public abstract byte InstanceCode { get; } - public EchonetNode Node { get; } - public abstract IReadOnlyDictionary Properties { get; } - - public override string ToString() {} - } - - public static class EchonetObjectExtensions { - public static ValueTask NotifyPropertiesOneWayMulticastAsync(this EchonetObject sourceObject, IEnumerable notifyPropertyCodes, EOJ destinationObject, CancellationToken cancellationToken = default) {} - public static async ValueTask ReadPropertiesAsync(this EchonetObject destinationObject, IEnumerable readPropertyCodes, EchonetObject sourceObject, CancellationToken cancellationToken = default) {} - public static ValueTask RequestNotifyPropertiesOneWayAsync(this EchonetObject sourceObject, IPAddress? destinationNodeAddress, EOJ destinationObject, IEnumerable requestNotifyPropertyCodes, CancellationToken cancellationToken = default) {} - public static async ValueTask WritePropertiesAsync(this EchonetObject destinationObject, IEnumerable writePropertyCodes, EchonetObject sourceObject, CancellationToken cancellationToken = default) {} - public static async ValueTask WritePropertiesOneWayAsync(this EchonetObject destinationObject, IEnumerable writePropertyCodes, EchonetObject sourceObject, CancellationToken cancellationToken = default) {} - public static async ValueTask<(EchonetServiceResponse SetResponse, EchonetServiceResponse GetResponse)> WriteReadPropertiesAsync(this EchonetObject destinationObject, IEnumerable writePropertyCodes, IEnumerable readPropertyCodes, EchonetObject sourceObject, CancellationToken cancellationToken = default) {} - } - - public abstract class EchonetProperty { - public event EventHandler<(ReadOnlyMemory OldValue, ReadOnlyMemory NewValue)>? ValueChanged; - - protected EchonetProperty() {} - - public abstract bool CanAnnounceStatusChange { get; } - public abstract bool CanGet { get; } - public abstract bool CanSet { get; } - public abstract byte Code { get; } - public abstract EchonetObject Device { get; } - protected virtual IEventInvoker EventInvoker { get; } - public bool HasModified { get; } - public DateTimeOffset LastUpdatedTime { get; } - public ReadOnlyMemory ValueMemory { get; } - public ReadOnlySpan ValueSpan { get; } - - internal protected virtual bool IsAcceptableValue(ReadOnlySpan edt) {} - public void SetValue(ReadOnlyMemory newValue, bool raiseValueChangedEvent = false, bool setLastUpdatedTime = false) {} - public override string ToString() {} - public void WriteValue(Action> write, bool raiseValueChangedEvent = false, bool setLastUpdatedTime = false) {} - } - - public readonly struct EchonetServiceResponse { - public bool IsSuccess { get; init; } - public IReadOnlyDictionary Properties { get; init; } - } -} - -namespace Smdn.Net.EchonetLite.ComponentModel { - public interface IEventInvoker { - ISynchronizeInvoke? SynchronizingObject { get; set; } - - void InvokeEvent(object? sender, EventHandler? eventHandler, TEventArgs e); - } -} - -namespace Smdn.Net.EchonetLite.ObjectModel { - public delegate void EchonetPropertyValueFormatter(IBufferWriter writer, TValue @value) where TValue : notnull; - public delegate bool EchonetPropertyValueParser(ReadOnlySpan data, out TValue @value) where TValue : notnull; - - public interface IEchonetPropertyAccessor { - EchonetProperty BaseProperty { get; } - bool IsAvailable { get; } - byte PropertyCode { get; } - } - - public interface IEchonetPropertyGetAccessor : IEchonetPropertyAccessor { - TValue Value { get; } - - bool TryGetValue(out TValue @value); - } - - public interface IEchonetPropertySetGetAccessor : IEchonetPropertyGetAccessor { - new TValue Value { get; set; } - } - - public abstract class DeviceSuperClass : EchonetDevice { - protected DeviceSuperClass(byte classGroupCode, byte classCode, byte instanceCode) {} - - public IEchonetPropertyGetAccessor CurrentDateAndTime { get; } - public IEchonetPropertyGetAccessor CurrentTimeSetting { get; } - public IEchonetPropertyGetAccessor FaultStatus { get; } - public IEchonetPropertyGetAccessor InstallationLocation { get; } - public IEchonetPropertyGetAccessor Manufacturer { get; } - public IEchonetPropertyGetAccessor OperationStatus { get; } - public IEchonetPropertyGetAccessor<(string Release, int Revision)> Protocol { get; } - public IEchonetPropertyGetAccessor SerialNumber { get; } - - protected IEchonetPropertyGetAccessor CreateAccessor(byte propertyCode, EchonetPropertyValueParser tryParseValue) where TValue : notnull {} - protected IEchonetPropertySetGetAccessor CreateAccessor(byte propertyCode, EchonetPropertyValueParser tryParseValue, EchonetPropertyValueFormatter formatValue) where TValue : notnull {} - } - - public class EchonetPropertyInvalidValueException : InvalidOperationException { - public EchonetPropertyInvalidValueException() {} - public EchonetPropertyInvalidValueException(EchonetObject deviceObject, EchonetProperty property) {} - public EchonetPropertyInvalidValueException(string? message) {} - public EchonetPropertyInvalidValueException(string? message, Exception? innerException) {} - - public EchonetObject? DeviceObject { get; } - public EchonetProperty? Property { get; } - } - - public class EchonetPropertyNotAvailableException : InvalidOperationException { - public EchonetPropertyNotAvailableException() {} - public EchonetPropertyNotAvailableException(EchonetObject deviceObject, byte propertyCode) {} - public EchonetPropertyNotAvailableException(string? message) {} - public EchonetPropertyNotAvailableException(string? message, Exception? innerException) {} - - public EchonetObject? DeviceObject { get; } - public byte? PropertyCode { get; } - } -} - -namespace Smdn.Net.EchonetLite.Protocol { - public enum EHD1 : byte { - EchonetLite = 16, - MaskEchonet = 128, - None = 0, - } - - public enum EHD2 : byte { - Format1 = 129, - Format2 = 130, - } - - public enum ESV : byte { - Get = 98, - GetResponse = 114, - GetServiceNotAvailable = 82, - Inf = 115, - InfC = 116, - InfCResponse = 122, - InfRequest = 99, - InfServiceNotAvailable = 83, - Invalid = 0, - SetC = 97, - SetCServiceNotAvailable = 81, - SetGet = 110, - SetGetResponse = 126, - SetGetServiceNotAvailable = 94, - SetI = 96, - SetIServiceNotAvailable = 80, - SetResponse = 113, - } - - public static class ESVExtensions { - public static string ToSymbolString(this ESV esv) {} - } - - public static class FrameSerializer { - public static void SerializeEchonetLiteFrameFormat1(IBufferWriter buffer, int tid, EOJ sourceObject, EOJ destinationObject, ESV esv, IEnumerable properties) {} - public static void SerializeEchonetLiteFrameFormat1(IBufferWriter buffer, int tid, EOJ sourceObject, EOJ destinationObject, ESV esv, IEnumerable propertiesForSet, IEnumerable propertiesForGet) {} - public static void SerializeEchonetLiteFrameFormat2(IBufferWriter buffer, ushort tid, ReadOnlySpan edata) {} - public static bool TryDeserialize(ReadOnlyMemory bytes, out EHD1 ehd1, out EHD2 ehd2, out int tid, out ReadOnlyMemory edata) {} - public static bool TryDeserialize(ReadOnlySpan bytes, out EHD1 ehd1, out EHD2 ehd2, out int tid, out ReadOnlySpan edata) {} - public static bool TryParseEDataAsFormat1Message(ReadOnlySpan bytes, out Format1Message message) {} - } - - public static class PropertyContentSerializer { - public static bool TryDeserializeInstanceListNotification(ReadOnlySpan content, [NotNullWhen(true)] out IReadOnlyList? instanceList) {} - public static bool TryDeserializePropertyMap(ReadOnlySpan content, [NotNullWhen(true)] out IReadOnlyList? propertyMap) {} - public static bool TrySerializeInstanceListNotification(IEnumerable instanceList, Span destination, out int bytesWritten) {} - } - - public readonly struct EOJ : IEquatable { - public static readonly EOJ NodeProfile; // = "0E.F0 00" - - public static bool AreSame(EOJ x, EOJ y) {} - public static bool operator == (EOJ c1, EOJ c2) {} - public static bool operator != (EOJ c1, EOJ c2) {} - - public EOJ(byte classGroupCode, byte classCode, byte instanceCode) {} - - public byte ClassCode { get; } - public byte ClassGroupCode { get; } - public byte InstanceCode { get; } - - public bool Equals(EOJ other) {} - public override bool Equals(object? obj) {} - public override int GetHashCode() {} - public override string ToString() {} - } - - public readonly struct Format1Message { - public Format1Message(EOJ seoj, EOJ deoj, ESV esv, IReadOnlyList properties) {} - public Format1Message(EOJ seoj, EOJ deoj, ESV esv, IReadOnlyList propertiesForSet, IReadOnlyList propertiesForGet) {} - - public EOJ DEOJ { get; } - public ESV ESV { get; } - public EOJ SEOJ { get; } - - public IReadOnlyList GetProperties() {} - public (IReadOnlyList PropertiesForSet, IReadOnlyList PropertiesForGet) GetPropertiesForSetAndGet() {} - public override string ToString() {} - } - - public readonly struct PropertyValue { - public PropertyValue(byte epc) {} - public PropertyValue(byte epc, ReadOnlyMemory edt) {} - - public ReadOnlyMemory EDT { get; } - public byte EPC { get; } - public byte PDC { get; } - } -} - -namespace Smdn.Net.EchonetLite.Specifications { - public abstract class EchonetDeviceObjectDetail : IEchonetObjectSpecification { - protected static class PropertyDetails { - public static IReadOnlyList Properties { get; } - } - - public static IEchonetObjectSpecification Controller { get; } - - protected EchonetDeviceObjectDetail() {} - - public abstract byte ClassCode { get; } - public abstract byte ClassGroupCode { get; } - public abstract IEnumerable Properties { get; } - } - - public abstract class EchonetProfileObjectDetail : IEchonetObjectSpecification { - protected static class PropertyDetails { - public static IReadOnlyList Properties { get; } - } - - public static IEchonetObjectSpecification NodeProfile { get; } - - protected EchonetProfileObjectDetail() {} - - public abstract byte ClassCode { get; } - public byte ClassGroupCode { get; } - public abstract IEnumerable Properties { get; } - } -} - -namespace Smdn.Net.EchonetLite.Transport { - public class UdpEchonetLiteHandler : EchonetLiteHandler { - public UdpEchonetLiteHandler(ILogger logger) {} - - public override IPAddress? LocalAddress { get; } - public override ISynchronizeInvoke? SynchronizingObject { get; set; } - - protected override void Dispose(bool disposing) {} - protected override ValueTask DisposeAsyncCore() {} - protected override async ValueTask ReceiveAsyncCore(IBufferWriter buffer, CancellationToken cancellationToken) {} - protected override async ValueTask SendAsyncCore(ReadOnlyMemory buffer, CancellationToken cancellationToken) {} - protected override async ValueTask SendToAsyncCore(IPAddress remoteAddress, ReadOnlyMemory buffer, CancellationToken cancellationToken) {} - } -} -// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.1.0. -// Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating) diff --git a/doc/api-list/Smdn.Net.EchonetLite/Smdn.Net.EchonetLite-net8.0.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite/Smdn.Net.EchonetLite-net8.0.apilist.cs index d597d46..fe746b7 100644 --- a/doc/api-list/Smdn.Net.EchonetLite/Smdn.Net.EchonetLite-net8.0.apilist.cs +++ b/doc/api-list/Smdn.Net.EchonetLite/Smdn.Net.EchonetLite-net8.0.apilist.cs @@ -1,20 +1,21 @@ -// Smdn.Net.EchonetLite.dll (Smdn.Net.EchonetLite-2.0.0-preview2) +// Smdn.Net.EchonetLite.dll (Smdn.Net.EchonetLite-2.0.0) // Name: Smdn.Net.EchonetLite // AssemblyVersion: 2.0.0.0 -// InformationalVersion: 2.0.0-preview2+60a8ce3520b765b1bcab669a662cfb615f41a1f5 +// InformationalVersion: 2.0.0+2bb1851c89ba40ded2eeae51a98f8f88d864931f // TargetFramework: .NETCoreApp,Version=v8.0 // Configuration: Release // Referenced assemblies: +// Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 // Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 +// Polly.Core, Version=8.0.0.0, Culture=neutral, PublicKeyToken=c8a3ffc3f8f825cc // Smdn.Net.EchonetLite.Primitives, Version=2.0.0.0, Culture=neutral // System.Collections, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a // System.Collections.Concurrent, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a +// System.ComponentModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a // System.ComponentModel.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a // System.Linq, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a // System.Memory, Version=8.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 -// System.Net.NetworkInformation, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a // System.Net.Primitives, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a -// System.Net.Sockets, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a // System.ObjectModel, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a // System.Runtime, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a // System.Threading, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a @@ -30,11 +31,10 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Logging; +using Polly; using Smdn.Net.EchonetLite; -using Smdn.Net.EchonetLite.ComponentModel; using Smdn.Net.EchonetLite.ObjectModel; using Smdn.Net.EchonetLite.Protocol; -using Smdn.Net.EchonetLite.Transport; namespace Smdn.Net.EchonetLite { public interface IEchonetDeviceFactory { @@ -51,44 +51,48 @@ public class EchonetClient : IAsyncDisposable, IDisposable { - public event EventHandler? InstanceListUpdated; - public event EventHandler? InstanceListUpdating; - public event EventHandler? NodeJoined; - public event EventHandler? PropertyMapAcquired; - public event EventHandler? PropertyMapAcquiring; + public static readonly ResiliencePropertyKey ResiliencePropertyKeyForRequestServiceCode; // = "ResiliencePropertyKeyForRequestServiceCode" + public static readonly ResiliencePropertyKey ResiliencePropertyKeyForResponseServiceCode; // = "ResiliencePropertyKeyForResponseServiceCode" - public EchonetClient(EchonetNode selfNode, IEchonetLiteHandler echonetLiteHandler, bool shouldDisposeEchonetLiteHandler, IEchonetDeviceFactory? deviceFactory, ILogger? logger) {} - public EchonetClient(IEchonetLiteHandler echonetLiteHandler, ILogger? logger = null) {} - public EchonetClient(IEchonetLiteHandler echonetLiteHandler, bool shouldDisposeEchonetLiteHandler, ILogger? logger) {} + public event EventHandler? InstanceListUpdated; + public event EventHandler? InstanceListUpdating; + public event EventHandler? PropertyMapAcquired; + public event EventHandler? PropertyMapAcquiring; - public IReadOnlyCollection OtherNodes { get; } + public EchonetClient(EchonetNode selfNode, IEchonetLiteHandler echonetLiteHandler, bool shouldDisposeEchonetLiteHandler = false, EchonetNodeRegistry? nodeRegistry = null, IEchonetDeviceFactory? deviceFactory = null, ResiliencePipeline? resiliencePipelineForSendingResponseFrame = null, ILogger? logger = null, IServiceProvider? serviceProvider = null) {} + public EchonetClient(IEchonetLiteHandler echonetLiteHandler, bool shouldDisposeEchonetLiteHandler = false, IServiceProvider? serviceProvider = null) {} + public EchonetClient(IEchonetLiteHandler echonetLiteHandler, bool shouldDisposeEchonetLiteHandler, EchonetNodeRegistry? nodeRegistry, IEchonetDeviceFactory? deviceFactory, IServiceProvider? serviceProvider = null) {} + + protected ILogger? Logger { get; } + public EchonetNodeRegistry NodeRegistry { get; } public EchonetNode SelfNode { get; } - public TaskFactory? ServiceHandlerTaskFactory { get; set; } public ISynchronizeInvoke? SynchronizingObject { get; set; } - public async ValueTask AcquirePropertyMapsAsync(EchonetObject device, IEnumerable? extraPropertyCodes = null, CancellationToken cancellationToken = default) {} + public async ValueTask AcquirePropertyMapsAsync(EchonetObject device, IEnumerable? extraPropertyCodes = null, ResiliencePipeline? resiliencePipelineForServiceRequest = null, CancellationToken cancellationToken = default) {} protected virtual void Dispose(bool disposing) {} public void Dispose() {} public async ValueTask DisposeAsync() {} protected virtual async ValueTask DisposeAsyncCore() {} internal protected IPAddress? GetSelfNodeAddress() {} - protected void InvokeEvent(object? sender, EventHandler? eventHandler, TEventArgs e) {} - public async ValueTask NotifyAsync(EOJ sourceObject, IEnumerable properties, IPAddress destinationNodeAddress, EOJ destinationObject, CancellationToken cancellationToken = default) {} - public async ValueTask NotifyInstanceListAsync(CancellationToken cancellationToken = default) {} - public ValueTask NotifyOneWayAsync(EOJ sourceObject, IEnumerable properties, IPAddress? destinationNodeAddress, EOJ destinationObject, CancellationToken cancellationToken = default) {} - protected virtual void OnInstanceListUpdated(EchonetNode node) {} - protected virtual void OnInstanceListUpdating(EchonetNode node) {} - protected virtual void OnNodeJoined(EchonetNode node) {} - protected virtual void OnPropertyMapAcquired(EchonetObject device) {} - protected virtual void OnPropertyMapAcquiring(EchonetObject device) {} - public ValueTask RequestNotifyInstanceListAsync(IPAddress? destinationNodeAddress = null, CancellationToken cancellationToken = default) {} - public async Task RequestNotifyInstanceListAsync(IPAddress? destinationNodeAddress, Func onInstanceListUpdated, TState state, CancellationToken cancellationToken = default) {} - public ValueTask RequestNotifyOneWayAsync(EOJ sourceObject, IPAddress? destinationNodeAddress, EOJ destinationObject, IEnumerable propertyCodes, CancellationToken cancellationToken = default) {} - public async ValueTask RequestReadAsync(EOJ sourceObject, IPAddress? destinationNodeAddress, EOJ destinationObject, IEnumerable propertyCodes, CancellationToken cancellationToken = default) {} - public async ValueTask RequestWriteAsync(EOJ sourceObject, IPAddress? destinationNodeAddress, EOJ destinationObject, IEnumerable properties, CancellationToken cancellationToken = default) {} - public async ValueTask RequestWriteOneWayAsync(EOJ sourceObject, IPAddress? destinationNodeAddress, EOJ destinationObject, IEnumerable properties, CancellationToken cancellationToken = default) {} - public async ValueTask<(EchonetServiceResponse SetResponse, EchonetServiceResponse GetResponse)> RequestWriteReadAsync(EOJ sourceObject, IPAddress? destinationNodeAddress, EOJ destinationObject, IEnumerable propertiesToSet, IEnumerable propertyCodesToGet, CancellationToken cancellationToken = default) {} - void IEventInvoker.InvokeEvent(object? sender, EventHandler? eventHandler, TEventArgs e) {} + protected virtual async ValueTask HandleFormat1MessageAsync(IPAddress address, int id, Format1Message message, CancellationToken cancellationToken) {} + protected virtual ValueTask HandleFormat2MessageAsync(IPAddress address, int id, ReadOnlyMemory edata, CancellationToken cancellationToken) {} + protected void InvokeEvent(EventHandler? eventHandler, TEventArgs e) where TEventArgs : EventArgs {} + public async ValueTask NotifyAsync(EOJ sourceObject, IEnumerable properties, IPAddress destinationNodeAddress, EOJ destinationObject, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} + public async ValueTask NotifyInstanceListAsync(ResiliencePipeline? resiliencePipelineForServiceRequest = null, CancellationToken cancellationToken = default) {} + public async ValueTask NotifyOneWayAsync(EOJ sourceObject, IEnumerable properties, IPAddress? destinationNodeAddress, EOJ destinationObject, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} + protected virtual void OnInstanceListUpdated(EchonetNodeEventArgs e) {} + protected virtual void OnInstanceListUpdating(EchonetNodeEventArgs e) {} + protected virtual void OnPropertyMapAcquired(EchonetObjectEventArgs e) {} + protected virtual void OnPropertyMapAcquiring(EchonetObjectEventArgs e) {} + public Task RequestNotifyInstanceListAsync(IPAddress? destinationNodeAddress, Func onInstanceListUpdated, ResiliencePipeline? resiliencePipelineForServiceRequest = null, CancellationToken cancellationToken = default) {} + public ValueTask RequestNotifyInstanceListAsync(IPAddress? destinationNodeAddress = null, ResiliencePipeline? resiliencePipelineForServiceRequest = null, CancellationToken cancellationToken = default) {} + public async Task RequestNotifyInstanceListAsync(IPAddress? destinationNodeAddress, Func onInstanceListUpdated, TState state, ResiliencePipeline? resiliencePipelineForServiceRequest = null, CancellationToken cancellationToken = default) {} + public async ValueTask RequestNotifyOneWayAsync(EOJ sourceObject, IPAddress? destinationNodeAddress, EOJ destinationObject, IEnumerable propertyCodes, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} + public async ValueTask RequestReadAsync(EOJ sourceObject, IPAddress destinationNodeAddress, EOJ destinationObject, IEnumerable propertyCodes, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} + public async ValueTask RequestReadMulticastAsync(EOJ sourceObject, EOJ destinationObject, IEnumerable propertyCodes, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} + public async ValueTask RequestWriteAsync(EOJ sourceObject, IPAddress destinationNodeAddress, EOJ destinationObject, IEnumerable properties, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} + public ValueTask RequestWriteOneWayAsync(EOJ sourceObject, IPAddress? destinationNodeAddress, EOJ destinationObject, IEnumerable properties, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} + public async ValueTask<(EchonetServiceResponse SetResponse, EchonetServiceResponse GetResponse)> RequestWriteReadAsync(EOJ sourceObject, IPAddress destinationNodeAddress, EOJ destinationObject, IEnumerable propertiesToSet, IEnumerable propertyCodesToGet, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} protected void ThrowIfDisposed() {} } @@ -114,6 +118,24 @@ public static EchonetNode CreateSelfNode(IEnumerable devices) {} public abstract IPAddress Address { get; } public abstract IReadOnlyCollection Devices { get; } public EchonetObject NodeProfile { get; } + + public bool TryFindDevice(EOJ eoj, [NotNullWhen(true)] out EchonetObject? device) {} + } + + public sealed class EchonetNodeEventArgs : EventArgs { + public EchonetNodeEventArgs(EchonetNode node) {} + + public EchonetNode Node { get; } + } + + public sealed class EchonetNodeRegistry { + public event EventHandler? NodeAdded; + + public EchonetNodeRegistry() {} + + public IReadOnlyCollection Nodes { get; } + + public bool TryFind(IPAddress address, [NotNullWhen(true)] out EchonetNode? node) {} } public abstract class EchonetObject { @@ -121,61 +143,72 @@ public static EchonetObject Create(IEchonetObjectSpecification objectDetail, byt public static EchonetObject CreateNodeProfile(bool transmissionOnly = false) {} public event EventHandler? PropertiesChanged; + public event EventHandler? PropertyValueUpdated; public abstract byte ClassCode { get; } public abstract byte ClassGroupCode { get; } - protected virtual IEventInvoker EventInvoker { get; } + public EOJ EOJ { get; } public abstract bool HasPropertyMapAcquired { get; } public abstract byte InstanceCode { get; } public EchonetNode Node { get; } public abstract IReadOnlyDictionary Properties { get; } + internal protected virtual ISynchronizeInvoke? SynchronizingObject { get; } + internal protected void OnPropertyValueUpdated(EchonetPropertyValueUpdatedEventArgs e) {} public override string ToString() {} } + public sealed class EchonetObjectEventArgs : EventArgs { + public EchonetObjectEventArgs(EchonetObject device) {} + + public EchonetObject Device { get; } + } + public static class EchonetObjectExtensions { - public static ValueTask NotifyPropertiesOneWayMulticastAsync(this EchonetObject sourceObject, IEnumerable notifyPropertyCodes, EOJ destinationObject, CancellationToken cancellationToken = default) {} - public static async ValueTask ReadPropertiesAsync(this EchonetObject destinationObject, IEnumerable readPropertyCodes, EchonetObject sourceObject, CancellationToken cancellationToken = default) {} - public static ValueTask RequestNotifyPropertiesOneWayAsync(this EchonetObject sourceObject, IPAddress? destinationNodeAddress, EOJ destinationObject, IEnumerable requestNotifyPropertyCodes, CancellationToken cancellationToken = default) {} - public static async ValueTask WritePropertiesAsync(this EchonetObject destinationObject, IEnumerable writePropertyCodes, EchonetObject sourceObject, CancellationToken cancellationToken = default) {} - public static async ValueTask WritePropertiesOneWayAsync(this EchonetObject destinationObject, IEnumerable writePropertyCodes, EchonetObject sourceObject, CancellationToken cancellationToken = default) {} - public static async ValueTask<(EchonetServiceResponse SetResponse, EchonetServiceResponse GetResponse)> WriteReadPropertiesAsync(this EchonetObject destinationObject, IEnumerable writePropertyCodes, IEnumerable readPropertyCodes, EchonetObject sourceObject, CancellationToken cancellationToken = default) {} + public static async ValueTask AcquirePropertyMapsAsync(this EchonetObject device, IEnumerable? extraPropertyCodes = null, ResiliencePipeline? resiliencePipelineForServiceRequest = null, CancellationToken cancellationToken = default) {} + public static ValueTask NotifyPropertiesOneWayMulticastAsync(this EchonetObject sourceObject, IEnumerable notifyPropertyCodes, EOJ destinationObject, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} + public static async ValueTask ReadPropertiesAsync(this EchonetObject destinationObject, IEnumerable readPropertyCodes, EchonetObject sourceObject, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} + public static ValueTask ReadPropertiesMulticastAsync(this EchonetObject sourceObject, EOJ destinationObject, IEnumerable readPropertyCodes, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} + public static ValueTask RequestNotifyPropertiesOneWayAsync(this EchonetObject sourceObject, IPAddress? destinationNodeAddress, EOJ destinationObject, IEnumerable requestNotifyPropertyCodes, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} + public static async ValueTask WritePropertiesAsync(this EchonetObject destinationObject, IEnumerable writePropertyCodes, EchonetObject sourceObject, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} + public static async ValueTask WritePropertiesOneWayAsync(this EchonetObject destinationObject, IEnumerable writePropertyCodes, EchonetObject sourceObject, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} + public static async ValueTask<(EchonetServiceResponse SetResponse, EchonetServiceResponse GetResponse)> WriteReadPropertiesAsync(this EchonetObject destinationObject, IEnumerable writePropertyCodes, IEnumerable readPropertyCodes, EchonetObject sourceObject, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} } public abstract class EchonetProperty { - public event EventHandler<(ReadOnlyMemory OldValue, ReadOnlyMemory NewValue)>? ValueChanged; - - protected EchonetProperty() {} + public event EventHandler? ValueUpdated; public abstract bool CanAnnounceStatusChange { get; } public abstract bool CanGet { get; } public abstract bool CanSet { get; } public abstract byte Code { get; } public abstract EchonetObject Device { get; } - protected virtual IEventInvoker EventInvoker { get; } public bool HasModified { get; } - public DateTimeOffset LastUpdatedTime { get; } + public DateTime LastUpdatedTime { get; } protected virtual TimeProvider TimeProvider { get; } public ReadOnlyMemory ValueMemory { get; } public ReadOnlySpan ValueSpan { get; } internal protected virtual bool IsAcceptableValue(ReadOnlySpan edt) {} - public void SetValue(ReadOnlyMemory newValue, bool raiseValueChangedEvent = false, bool setLastUpdatedTime = false) {} + public void SetValue(ReadOnlyMemory newValue, bool raiseValueUpdatedEvent = false, bool setLastUpdatedTime = false) {} public override string ToString() {} - public void WriteValue(Action> write, bool raiseValueChangedEvent = false, bool setLastUpdatedTime = false) {} + internal protected abstract void UpdateAccessRule(bool canSet, bool canGet, bool canAnnounceStatusChange); + public void WriteValue(Action> write, bool raiseValueUpdatedEvent = false, bool setLastUpdatedTime = false) {} } - public readonly struct EchonetServiceResponse { - public bool IsSuccess { get; init; } - public IReadOnlyDictionary Properties { get; init; } - } -} + public sealed class EchonetPropertyValueUpdatedEventArgs : EventArgs { + public EchonetPropertyValueUpdatedEventArgs(EchonetProperty property, ReadOnlyMemory oldValue, ReadOnlyMemory newValue, DateTime previousUpdatedTime, DateTime updatedTime) {} -namespace Smdn.Net.EchonetLite.ComponentModel { - public interface IEventInvoker { - ISynchronizeInvoke? SynchronizingObject { get; set; } + public ReadOnlyMemory NewValue { get; } + public ReadOnlyMemory OldValue { get; } + public DateTime PreviousUpdatedTime { get; } + public EchonetProperty Property { get; } + public DateTime UpdatedTime { get; } + } - void InvokeEvent(object? sender, EventHandler? eventHandler, TEventArgs e); + public readonly struct EchonetServiceResponse { + public bool IsSuccess { get; init; } + public IReadOnlyDictionary Results { get; init; } } } @@ -234,6 +267,12 @@ public EchonetPropertyNotAvailableException(string? message, Exception? innerExc public EchonetObject? DeviceObject { get; } public byte? PropertyCode { get; } } + + public static class IEchonetPropertyAccessorExtensions { + public static bool HasElapsedSinceLastUpdated(this IEchonetPropertyAccessor accessor, DateTime dateTime) {} + public static bool HasElapsedSinceLastUpdated(this IEchonetPropertyAccessor accessor, TimeSpan duration) {} + public static bool HasValue(this IEchonetPropertyGetAccessor getAccessor) {} + } } namespace Smdn.Net.EchonetLite.Protocol { @@ -281,14 +320,24 @@ public static bool TryDeserialize(ReadOnlySpan bytes, out EHD1 ehd1, out E public static bool TryParseEDataAsFormat1Message(ReadOnlySpan bytes, out Format1Message message) {} } - public static class PropertyContentSerializer { - public static bool TryDeserializeInstanceListNotification(ReadOnlySpan content, [NotNullWhen(true)] out IReadOnlyList? instanceList) {} - public static bool TryDeserializePropertyMap(ReadOnlySpan content, [NotNullWhen(true)] out IReadOnlyList? propertyMap) {} - public static bool TrySerializeInstanceListNotification(IEnumerable instanceList, Span destination, out int bytesWritten) {} + public static class InstanceListSerializer { + public const int MaxDataLength = 253; + + public static int Serialize(IBufferWriter writer, IEnumerable instanceList, bool prependPdc) {} + public static bool TryDeserialize(ReadOnlySpan data, [NotNullWhen(true)] out IReadOnlyList? instanceList) {} + public static bool TrySerialize(IEnumerable instanceList, Span destination, out int bytesWritten) {} + } + + public static class PropertyMapSerializer { + public static int Serialize(IBufferWriter writer, IReadOnlyCollection propertyMap) {} + public static bool TryDeserialize(ReadOnlySpan data, [NotNullWhen(true)] out IReadOnlyList? propertyMap) {} + public static bool TrySerialize(IReadOnlyCollection propertyMap, Span destination, out int bytesWritten) {} } public readonly struct EOJ : IEquatable { public static readonly EOJ NodeProfile; // = "0E.F0 00" + public static readonly EOJ NodeProfileForGeneralNode; // = "0E.F0 01" + public static readonly EOJ NodeProfileForTransmissionOnlyNode; // = "0E.F0 02" public static bool AreSame(EOJ x, EOJ y) {} public static bool operator == (EOJ c1, EOJ c2) {} @@ -358,20 +407,5 @@ protected EchonetProfileObjectDetail() {} public abstract IEnumerable Properties { get; } } } - -namespace Smdn.Net.EchonetLite.Transport { - public class UdpEchonetLiteHandler : EchonetLiteHandler { - public UdpEchonetLiteHandler(ILogger logger) {} - - public override IPAddress? LocalAddress { get; } - public override ISynchronizeInvoke? SynchronizingObject { get; set; } - - protected override void Dispose(bool disposing) {} - protected override ValueTask DisposeAsyncCore() {} - protected override async ValueTask ReceiveAsyncCore(IBufferWriter buffer, CancellationToken cancellationToken) {} - protected override async ValueTask SendAsyncCore(ReadOnlyMemory buffer, CancellationToken cancellationToken) {} - protected override async ValueTask SendToAsyncCore(IPAddress remoteAddress, ReadOnlyMemory buffer, CancellationToken cancellationToken) {} - } -} -// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.1.0. +// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.5.0.0. // Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating) diff --git a/doc/api-list/Smdn.Net.EchonetLite/Smdn.Net.EchonetLite-netstandard2.1.apilist.cs b/doc/api-list/Smdn.Net.EchonetLite/Smdn.Net.EchonetLite-netstandard2.1.apilist.cs index 5671a9a..f04423c 100644 --- a/doc/api-list/Smdn.Net.EchonetLite/Smdn.Net.EchonetLite-netstandard2.1.apilist.cs +++ b/doc/api-list/Smdn.Net.EchonetLite/Smdn.Net.EchonetLite-netstandard2.1.apilist.cs @@ -1,11 +1,13 @@ -// Smdn.Net.EchonetLite.dll (Smdn.Net.EchonetLite-2.0.0-preview2) +// Smdn.Net.EchonetLite.dll (Smdn.Net.EchonetLite-2.0.0) // Name: Smdn.Net.EchonetLite // AssemblyVersion: 2.0.0.0 -// InformationalVersion: 2.0.0-preview2+60a8ce3520b765b1bcab669a662cfb615f41a1f5 +// InformationalVersion: 2.0.0+2bb1851c89ba40ded2eeae51a98f8f88d864931f // TargetFramework: .NETStandard,Version=v2.1 // Configuration: Release // Referenced assemblies: +// Microsoft.Extensions.DependencyInjection.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 // Microsoft.Extensions.Logging.Abstractions, Version=6.0.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60 +// Polly.Core, Version=8.0.0.0, Culture=neutral, PublicKeyToken=c8a3ffc3f8f825cc // Smdn.Net.EchonetLite.Primitives, Version=2.0.0.0, Culture=neutral // netstandard, Version=2.1.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51 #nullable enable annotations @@ -20,11 +22,10 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Logging; +using Polly; using Smdn.Net.EchonetLite; -using Smdn.Net.EchonetLite.ComponentModel; using Smdn.Net.EchonetLite.ObjectModel; using Smdn.Net.EchonetLite.Protocol; -using Smdn.Net.EchonetLite.Transport; namespace Smdn.Net.EchonetLite { public interface IEchonetDeviceFactory { @@ -41,44 +42,48 @@ public class EchonetClient : IAsyncDisposable, IDisposable { - public event EventHandler? InstanceListUpdated; - public event EventHandler? InstanceListUpdating; - public event EventHandler? NodeJoined; - public event EventHandler? PropertyMapAcquired; - public event EventHandler? PropertyMapAcquiring; + public static readonly ResiliencePropertyKey ResiliencePropertyKeyForRequestServiceCode; // = "ResiliencePropertyKeyForRequestServiceCode" + public static readonly ResiliencePropertyKey ResiliencePropertyKeyForResponseServiceCode; // = "ResiliencePropertyKeyForResponseServiceCode" - public EchonetClient(EchonetNode selfNode, IEchonetLiteHandler echonetLiteHandler, bool shouldDisposeEchonetLiteHandler, IEchonetDeviceFactory? deviceFactory, ILogger? logger) {} - public EchonetClient(IEchonetLiteHandler echonetLiteHandler, ILogger? logger = null) {} - public EchonetClient(IEchonetLiteHandler echonetLiteHandler, bool shouldDisposeEchonetLiteHandler, ILogger? logger) {} + public event EventHandler? InstanceListUpdated; + public event EventHandler? InstanceListUpdating; + public event EventHandler? PropertyMapAcquired; + public event EventHandler? PropertyMapAcquiring; - public IReadOnlyCollection OtherNodes { get; } + public EchonetClient(EchonetNode selfNode, IEchonetLiteHandler echonetLiteHandler, bool shouldDisposeEchonetLiteHandler = false, EchonetNodeRegistry? nodeRegistry = null, IEchonetDeviceFactory? deviceFactory = null, ResiliencePipeline? resiliencePipelineForSendingResponseFrame = null, ILogger? logger = null, IServiceProvider? serviceProvider = null) {} + public EchonetClient(IEchonetLiteHandler echonetLiteHandler, bool shouldDisposeEchonetLiteHandler = false, IServiceProvider? serviceProvider = null) {} + public EchonetClient(IEchonetLiteHandler echonetLiteHandler, bool shouldDisposeEchonetLiteHandler, EchonetNodeRegistry? nodeRegistry, IEchonetDeviceFactory? deviceFactory, IServiceProvider? serviceProvider = null) {} + + protected ILogger? Logger { get; } + public EchonetNodeRegistry NodeRegistry { get; } public EchonetNode SelfNode { get; } - public TaskFactory? ServiceHandlerTaskFactory { get; set; } public ISynchronizeInvoke? SynchronizingObject { get; set; } - public async ValueTask AcquirePropertyMapsAsync(EchonetObject device, IEnumerable? extraPropertyCodes = null, CancellationToken cancellationToken = default) {} + public async ValueTask AcquirePropertyMapsAsync(EchonetObject device, IEnumerable? extraPropertyCodes = null, ResiliencePipeline? resiliencePipelineForServiceRequest = null, CancellationToken cancellationToken = default) {} protected virtual void Dispose(bool disposing) {} public void Dispose() {} public async ValueTask DisposeAsync() {} protected virtual async ValueTask DisposeAsyncCore() {} internal protected IPAddress? GetSelfNodeAddress() {} - protected void InvokeEvent(object? sender, EventHandler? eventHandler, TEventArgs e) {} - public async ValueTask NotifyAsync(EOJ sourceObject, IEnumerable properties, IPAddress destinationNodeAddress, EOJ destinationObject, CancellationToken cancellationToken = default) {} - public async ValueTask NotifyInstanceListAsync(CancellationToken cancellationToken = default) {} - public ValueTask NotifyOneWayAsync(EOJ sourceObject, IEnumerable properties, IPAddress? destinationNodeAddress, EOJ destinationObject, CancellationToken cancellationToken = default) {} - protected virtual void OnInstanceListUpdated(EchonetNode node) {} - protected virtual void OnInstanceListUpdating(EchonetNode node) {} - protected virtual void OnNodeJoined(EchonetNode node) {} - protected virtual void OnPropertyMapAcquired(EchonetObject device) {} - protected virtual void OnPropertyMapAcquiring(EchonetObject device) {} - public ValueTask RequestNotifyInstanceListAsync(IPAddress? destinationNodeAddress = null, CancellationToken cancellationToken = default) {} - public async Task RequestNotifyInstanceListAsync(IPAddress? destinationNodeAddress, Func onInstanceListUpdated, TState state, CancellationToken cancellationToken = default) {} - public ValueTask RequestNotifyOneWayAsync(EOJ sourceObject, IPAddress? destinationNodeAddress, EOJ destinationObject, IEnumerable propertyCodes, CancellationToken cancellationToken = default) {} - public async ValueTask RequestReadAsync(EOJ sourceObject, IPAddress? destinationNodeAddress, EOJ destinationObject, IEnumerable propertyCodes, CancellationToken cancellationToken = default) {} - public async ValueTask RequestWriteAsync(EOJ sourceObject, IPAddress? destinationNodeAddress, EOJ destinationObject, IEnumerable properties, CancellationToken cancellationToken = default) {} - public async ValueTask RequestWriteOneWayAsync(EOJ sourceObject, IPAddress? destinationNodeAddress, EOJ destinationObject, IEnumerable properties, CancellationToken cancellationToken = default) {} - public async ValueTask<(EchonetServiceResponse SetResponse, EchonetServiceResponse GetResponse)> RequestWriteReadAsync(EOJ sourceObject, IPAddress? destinationNodeAddress, EOJ destinationObject, IEnumerable propertiesToSet, IEnumerable propertyCodesToGet, CancellationToken cancellationToken = default) {} - void IEventInvoker.InvokeEvent(object? sender, EventHandler? eventHandler, TEventArgs e) {} + protected virtual async ValueTask HandleFormat1MessageAsync(IPAddress address, int id, Format1Message message, CancellationToken cancellationToken) {} + protected virtual ValueTask HandleFormat2MessageAsync(IPAddress address, int id, ReadOnlyMemory edata, CancellationToken cancellationToken) {} + protected void InvokeEvent(EventHandler? eventHandler, TEventArgs e) where TEventArgs : EventArgs {} + public async ValueTask NotifyAsync(EOJ sourceObject, IEnumerable properties, IPAddress destinationNodeAddress, EOJ destinationObject, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} + public async ValueTask NotifyInstanceListAsync(ResiliencePipeline? resiliencePipelineForServiceRequest = null, CancellationToken cancellationToken = default) {} + public async ValueTask NotifyOneWayAsync(EOJ sourceObject, IEnumerable properties, IPAddress? destinationNodeAddress, EOJ destinationObject, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} + protected virtual void OnInstanceListUpdated(EchonetNodeEventArgs e) {} + protected virtual void OnInstanceListUpdating(EchonetNodeEventArgs e) {} + protected virtual void OnPropertyMapAcquired(EchonetObjectEventArgs e) {} + protected virtual void OnPropertyMapAcquiring(EchonetObjectEventArgs e) {} + public Task RequestNotifyInstanceListAsync(IPAddress? destinationNodeAddress, Func onInstanceListUpdated, ResiliencePipeline? resiliencePipelineForServiceRequest = null, CancellationToken cancellationToken = default) {} + public ValueTask RequestNotifyInstanceListAsync(IPAddress? destinationNodeAddress = null, ResiliencePipeline? resiliencePipelineForServiceRequest = null, CancellationToken cancellationToken = default) {} + public async Task RequestNotifyInstanceListAsync(IPAddress? destinationNodeAddress, Func onInstanceListUpdated, TState state, ResiliencePipeline? resiliencePipelineForServiceRequest = null, CancellationToken cancellationToken = default) {} + public async ValueTask RequestNotifyOneWayAsync(EOJ sourceObject, IPAddress? destinationNodeAddress, EOJ destinationObject, IEnumerable propertyCodes, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} + public async ValueTask RequestReadAsync(EOJ sourceObject, IPAddress destinationNodeAddress, EOJ destinationObject, IEnumerable propertyCodes, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} + public async ValueTask RequestReadMulticastAsync(EOJ sourceObject, EOJ destinationObject, IEnumerable propertyCodes, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} + public async ValueTask RequestWriteAsync(EOJ sourceObject, IPAddress destinationNodeAddress, EOJ destinationObject, IEnumerable properties, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} + public ValueTask RequestWriteOneWayAsync(EOJ sourceObject, IPAddress? destinationNodeAddress, EOJ destinationObject, IEnumerable properties, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} + public async ValueTask<(EchonetServiceResponse SetResponse, EchonetServiceResponse GetResponse)> RequestWriteReadAsync(EOJ sourceObject, IPAddress destinationNodeAddress, EOJ destinationObject, IEnumerable propertiesToSet, IEnumerable propertyCodesToGet, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} protected void ThrowIfDisposed() {} } @@ -104,6 +109,24 @@ public static EchonetNode CreateSelfNode(IEnumerable devices) {} public abstract IPAddress Address { get; } public abstract IReadOnlyCollection Devices { get; } public EchonetObject NodeProfile { get; } + + public bool TryFindDevice(EOJ eoj, [NotNullWhen(true)] out EchonetObject? device) {} + } + + public sealed class EchonetNodeEventArgs : EventArgs { + public EchonetNodeEventArgs(EchonetNode node) {} + + public EchonetNode Node { get; } + } + + public sealed class EchonetNodeRegistry { + public event EventHandler? NodeAdded; + + public EchonetNodeRegistry() {} + + public IReadOnlyCollection Nodes { get; } + + public bool TryFind(IPAddress address, [NotNullWhen(true)] out EchonetNode? node) {} } public abstract class EchonetObject { @@ -111,60 +134,71 @@ public static EchonetObject Create(IEchonetObjectSpecification objectDetail, byt public static EchonetObject CreateNodeProfile(bool transmissionOnly = false) {} public event EventHandler? PropertiesChanged; + public event EventHandler? PropertyValueUpdated; public abstract byte ClassCode { get; } public abstract byte ClassGroupCode { get; } - protected virtual IEventInvoker EventInvoker { get; } + public EOJ EOJ { get; } public abstract bool HasPropertyMapAcquired { get; } public abstract byte InstanceCode { get; } public EchonetNode Node { get; } public abstract IReadOnlyDictionary Properties { get; } + internal protected virtual ISynchronizeInvoke? SynchronizingObject { get; } + internal protected void OnPropertyValueUpdated(EchonetPropertyValueUpdatedEventArgs e) {} public override string ToString() {} } + public sealed class EchonetObjectEventArgs : EventArgs { + public EchonetObjectEventArgs(EchonetObject device) {} + + public EchonetObject Device { get; } + } + public static class EchonetObjectExtensions { - public static ValueTask NotifyPropertiesOneWayMulticastAsync(this EchonetObject sourceObject, IEnumerable notifyPropertyCodes, EOJ destinationObject, CancellationToken cancellationToken = default) {} - public static async ValueTask ReadPropertiesAsync(this EchonetObject destinationObject, IEnumerable readPropertyCodes, EchonetObject sourceObject, CancellationToken cancellationToken = default) {} - public static ValueTask RequestNotifyPropertiesOneWayAsync(this EchonetObject sourceObject, IPAddress? destinationNodeAddress, EOJ destinationObject, IEnumerable requestNotifyPropertyCodes, CancellationToken cancellationToken = default) {} - public static async ValueTask WritePropertiesAsync(this EchonetObject destinationObject, IEnumerable writePropertyCodes, EchonetObject sourceObject, CancellationToken cancellationToken = default) {} - public static async ValueTask WritePropertiesOneWayAsync(this EchonetObject destinationObject, IEnumerable writePropertyCodes, EchonetObject sourceObject, CancellationToken cancellationToken = default) {} - public static async ValueTask<(EchonetServiceResponse SetResponse, EchonetServiceResponse GetResponse)> WriteReadPropertiesAsync(this EchonetObject destinationObject, IEnumerable writePropertyCodes, IEnumerable readPropertyCodes, EchonetObject sourceObject, CancellationToken cancellationToken = default) {} + public static async ValueTask AcquirePropertyMapsAsync(this EchonetObject device, IEnumerable? extraPropertyCodes = null, ResiliencePipeline? resiliencePipelineForServiceRequest = null, CancellationToken cancellationToken = default) {} + public static ValueTask NotifyPropertiesOneWayMulticastAsync(this EchonetObject sourceObject, IEnumerable notifyPropertyCodes, EOJ destinationObject, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} + public static async ValueTask ReadPropertiesAsync(this EchonetObject destinationObject, IEnumerable readPropertyCodes, EchonetObject sourceObject, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} + public static ValueTask ReadPropertiesMulticastAsync(this EchonetObject sourceObject, EOJ destinationObject, IEnumerable readPropertyCodes, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} + public static ValueTask RequestNotifyPropertiesOneWayAsync(this EchonetObject sourceObject, IPAddress? destinationNodeAddress, EOJ destinationObject, IEnumerable requestNotifyPropertyCodes, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} + public static async ValueTask WritePropertiesAsync(this EchonetObject destinationObject, IEnumerable writePropertyCodes, EchonetObject sourceObject, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} + public static async ValueTask WritePropertiesOneWayAsync(this EchonetObject destinationObject, IEnumerable writePropertyCodes, EchonetObject sourceObject, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} + public static async ValueTask<(EchonetServiceResponse SetResponse, EchonetServiceResponse GetResponse)> WriteReadPropertiesAsync(this EchonetObject destinationObject, IEnumerable writePropertyCodes, IEnumerable readPropertyCodes, EchonetObject sourceObject, ResiliencePipeline? resiliencePipeline = null, CancellationToken cancellationToken = default) {} } public abstract class EchonetProperty { - public event EventHandler<(ReadOnlyMemory OldValue, ReadOnlyMemory NewValue)>? ValueChanged; - - protected EchonetProperty() {} + public event EventHandler? ValueUpdated; public abstract bool CanAnnounceStatusChange { get; } public abstract bool CanGet { get; } public abstract bool CanSet { get; } public abstract byte Code { get; } public abstract EchonetObject Device { get; } - protected virtual IEventInvoker EventInvoker { get; } public bool HasModified { get; } - public DateTimeOffset LastUpdatedTime { get; } + public DateTime LastUpdatedTime { get; } public ReadOnlyMemory ValueMemory { get; } public ReadOnlySpan ValueSpan { get; } internal protected virtual bool IsAcceptableValue(ReadOnlySpan edt) {} - public void SetValue(ReadOnlyMemory newValue, bool raiseValueChangedEvent = false, bool setLastUpdatedTime = false) {} + public void SetValue(ReadOnlyMemory newValue, bool raiseValueUpdatedEvent = false, bool setLastUpdatedTime = false) {} public override string ToString() {} - public void WriteValue(Action> write, bool raiseValueChangedEvent = false, bool setLastUpdatedTime = false) {} + internal protected abstract void UpdateAccessRule(bool canSet, bool canGet, bool canAnnounceStatusChange); + public void WriteValue(Action> write, bool raiseValueUpdatedEvent = false, bool setLastUpdatedTime = false) {} } - public readonly struct EchonetServiceResponse { - public bool IsSuccess { get; init; } - public IReadOnlyDictionary Properties { get; init; } - } -} + public sealed class EchonetPropertyValueUpdatedEventArgs : EventArgs { + public EchonetPropertyValueUpdatedEventArgs(EchonetProperty property, ReadOnlyMemory oldValue, ReadOnlyMemory newValue, DateTime previousUpdatedTime, DateTime updatedTime) {} -namespace Smdn.Net.EchonetLite.ComponentModel { - public interface IEventInvoker { - ISynchronizeInvoke? SynchronizingObject { get; set; } + public ReadOnlyMemory NewValue { get; } + public ReadOnlyMemory OldValue { get; } + public DateTime PreviousUpdatedTime { get; } + public EchonetProperty Property { get; } + public DateTime UpdatedTime { get; } + } - void InvokeEvent(object? sender, EventHandler? eventHandler, TEventArgs e); + public readonly struct EchonetServiceResponse { + public bool IsSuccess { get; init; } + public IReadOnlyDictionary Results { get; init; } } } @@ -223,6 +257,12 @@ public EchonetPropertyNotAvailableException(string? message, Exception? innerExc public EchonetObject? DeviceObject { get; } public byte? PropertyCode { get; } } + + public static class IEchonetPropertyAccessorExtensions { + public static bool HasElapsedSinceLastUpdated(this IEchonetPropertyAccessor accessor, DateTime dateTime) {} + public static bool HasElapsedSinceLastUpdated(this IEchonetPropertyAccessor accessor, TimeSpan duration) {} + public static bool HasValue(this IEchonetPropertyGetAccessor getAccessor) {} + } } namespace Smdn.Net.EchonetLite.Protocol { @@ -270,14 +310,24 @@ public static bool TryDeserialize(ReadOnlySpan bytes, out EHD1 ehd1, out E public static bool TryParseEDataAsFormat1Message(ReadOnlySpan bytes, out Format1Message message) {} } - public static class PropertyContentSerializer { - public static bool TryDeserializeInstanceListNotification(ReadOnlySpan content, [NotNullWhen(true)] out IReadOnlyList? instanceList) {} - public static bool TryDeserializePropertyMap(ReadOnlySpan content, [NotNullWhen(true)] out IReadOnlyList? propertyMap) {} - public static bool TrySerializeInstanceListNotification(IEnumerable instanceList, Span destination, out int bytesWritten) {} + public static class InstanceListSerializer { + public const int MaxDataLength = 253; + + public static int Serialize(IBufferWriter writer, IEnumerable instanceList, bool prependPdc) {} + public static bool TryDeserialize(ReadOnlySpan data, [NotNullWhen(true)] out IReadOnlyList? instanceList) {} + public static bool TrySerialize(IEnumerable instanceList, Span destination, out int bytesWritten) {} + } + + public static class PropertyMapSerializer { + public static int Serialize(IBufferWriter writer, IReadOnlyCollection propertyMap) {} + public static bool TryDeserialize(ReadOnlySpan data, [NotNullWhen(true)] out IReadOnlyList? propertyMap) {} + public static bool TrySerialize(IReadOnlyCollection propertyMap, Span destination, out int bytesWritten) {} } public readonly struct EOJ : IEquatable { public static readonly EOJ NodeProfile; // = "0E.F0 00" + public static readonly EOJ NodeProfileForGeneralNode; // = "0E.F0 01" + public static readonly EOJ NodeProfileForTransmissionOnlyNode; // = "0E.F0 02" public static bool AreSame(EOJ x, EOJ y) {} public static bool operator == (EOJ c1, EOJ c2) {} @@ -347,20 +397,5 @@ protected EchonetProfileObjectDetail() {} public abstract IEnumerable Properties { get; } } } - -namespace Smdn.Net.EchonetLite.Transport { - public class UdpEchonetLiteHandler : EchonetLiteHandler { - public UdpEchonetLiteHandler(ILogger logger) {} - - public override IPAddress? LocalAddress { get; } - public override ISynchronizeInvoke? SynchronizingObject { get; set; } - - protected override void Dispose(bool disposing) {} - protected override ValueTask DisposeAsyncCore() {} - protected override async ValueTask ReceiveAsyncCore(IBufferWriter buffer, CancellationToken cancellationToken) {} - protected override async ValueTask SendAsyncCore(ReadOnlyMemory buffer, CancellationToken cancellationToken) {} - protected override async ValueTask SendToAsyncCore(IPAddress remoteAddress, ReadOnlyMemory buffer, CancellationToken cancellationToken) {} - } -} -// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.4.1.0. +// API list generated by Smdn.Reflection.ReverseGenerating.ListApi.MSBuild.Tasks v1.5.0.0. // Smdn.Reflection.ReverseGenerating.ListApi.Core v1.3.1.0 (https://github.com/smdn/Smdn.Reflection.ReverseGenerating)