review(Driver.OpcUaClient.Browser): AttributesAsync updates LastUsedUtc

Review at HEAD 7286d320. -001: AttributesAsync now updates LastUsedUtc (IBrowseSession
contract) + test (InternalsVisibleTo+Moq added). -002 (continuation-point cancel leak)
deferred cross-cutting w/ runtime Driver.OpcUaClient.
This commit is contained in:
Joseph Doherty
2026-06-19 10:52:23 -04:00
parent 960d76ffcb
commit 2fe8e587dd
5 changed files with 122 additions and 2 deletions
@@ -60,11 +60,16 @@ internal sealed class OpcUaClientBrowseSession : IBrowseSession
}
/// <summary>The OPC UA picker treats variables as terminal leaves and does not surface
/// a per-attribute side-panel, so this always returns empty.</summary>
/// a per-attribute side-panel, so this always returns empty. <see cref="LastUsedUtc"/>
/// is still refreshed to honour the <see cref="IBrowseSession"/> contract and prevent
/// the reaper from evicting an active session that only receives attribute calls.</summary>
/// <param name="nodeId">Ignored.</param>
/// <param name="cancellationToken">Ignored.</param>
public Task<IReadOnlyList<AttributeInfo>> AttributesAsync(string nodeId, CancellationToken cancellationToken)
=> Task.FromResult<IReadOnlyList<AttributeInfo>>(Array.Empty<AttributeInfo>());
{
LastUsedUtc = DateTime.UtcNow;
return Task.FromResult<IReadOnlyList<AttributeInfo>>(Array.Empty<AttributeInfo>());
}
/// <summary>Issue a single-level Browse (plus continuation-point follow-ups) under the
/// given parent node. <see cref="Session.BrowseAsync"/> is not thread-safe, so all calls
@@ -14,4 +14,7 @@
<PackageReference Include="OPCFoundation.NetStandard.Opc.Ua.Configuration" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" />
</ItemGroup>
<ItemGroup>
<InternalsVisibleTo Include="ZB.MOM.WW.OtOpcUa.Driver.OpcUaClient.Browser.Tests"/>
</ItemGroup>
</Project>