Skip to content

Migrate Opc.Ua.Sample library Node Managers (TestData, Boiler, MemoryBuffer) to AsyncCustomNodeManager + Fluent #765

Description

@romanett

Part of #753.

Goal

Migrate the shared Opc.Ua.Sample library node managers (used by the WinForms Sample Server and others) to AsyncCustomNodeManager, and adopt source generation / FluentNodeManager where a generated model exists.

Scope

  • Samples/Opc.Ua.Sample/TestData/TestDataNodeManager.csTestDataNodeManager : CustomNodeManager2 (generated TestData model)
  • Samples/Opc.Ua.Sample/Boiler/BoilerNodeManager.csBoilerNodeManager : SampleNodeManager (generated Boiler model)
  • Samples/Opc.Ua.Sample/MemoryBuffer/MemoryBufferNodeManager.csMemoryBufferNodeManager : SampleNodeManager (hand-built)
  • Local base classes: Samples/Opc.Ua.Sample/Base/CustomNodeManager.cs (local CustomNodeManager2), Samples/Opc.Ua.Sample/Base/SampleNodeManager.cs
  • Samples/Opc.Ua.Sample/Opc.Ua.Sample.csproj (already references the source generator)

Because these managers derive from local base classes bundled in this project, decide up front whether to (a) retire the local CustomNodeManager2/SampleNodeManager in favor of the library AsyncCustomNodeManager, or (b) keep thin local shims. Prefer (a).

Step 1 — AsyncCustomNodeManager (all three managers)

  1. Rebase each manager onto the library AsyncCustomNodeManager; constructor base(server, configuration, <namespaceUri>).
  2. CreateAddressSpaceoverride async ValueTask CreateAddressSpaceAsync(...); LoadPredefinedNodesLoadPredefinedNodesAsync.
  3. Convert method/read/write callbacks to async handlers; TestData's system-callback simulation should push updates via await ClearChangeMasksAsync. MemoryBuffer: convert the buffer scan/update path to the async monitored-item/notification path.
  4. Remove lock (Lock) blocks — use base async locking.
  5. Register via IAsyncNodeManagerFactory; update Samples/Server.Net4 (UA Sample Server) startup accordingly.

Step 2 — FluentNodeManager (generated models: TestData, Boiler)

  • Opt in to generated node managers for the TestData and Boiler designs via [NodeManager] / MSBuild flag; use the generated LoadPredefinedNodesAsync.
  • Move callbacks into partial void Configure(INodeManagerBuilder builder); delete redundant hand-written address-space code. (MemoryBuffer stays a hand-written AsyncCustomNodeManager.)

Acceptance criteria

  • TestDataNodeManager, BoilerNodeManager, MemoryBufferNodeManager all derive from AsyncCustomNodeManager; local sync base classes are removed or reduced to non-conflicting helpers; no lock (Lock) remains.
  • Opc.Ua.Sample builds; the UA Sample Server (Samples/Server.Net4) starts; a client browses/reads/writes/subscribes across TestData, Boiler and MemoryBuffer, and TestData method calls succeed.

References

  • docs/AsyncServerSupport.md, docs/NodeManagers.md (UA-.NETStandard).

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions