FOCAS Tier-C PR C — IPC path end-to-end #171
Reference in New Issue
Block a user
Delete Branch "focas-tier-c-pr-c-ipc-proxy"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Third of 5 PRs splitting #220. Ships the wire path from IFocasClient calls in the .NET 10 driver, over a named-pipe or in-memory Stream, to the .NET 4.8 Host's FwlibFrameHandler, dispatched to an IFocasBackend. Keeps the existing IFocasClient DI seam untouched so in-process unit tests are unaffected.
Proxy side (.NET 10)
Ipc/FocasIpcClient— single-connection pipe client with call-gate to serialize concurrent callers; supports realNamedPipeClientStreamand arbitraryStreamfor in-memory loopback.Ipc/IpcFocasClient—IFocasClientforwarding every call as an IPC frame. Connect caches the SessionId; Read decodes typed values via FocasDataTypeCode; Write routes PMC bits through the first-class PmcBitWriteRequest so the RMW critical section stays on the Host.Ipc/IpcFocasClientFactory— DI factory producing one IpcFocasClient per pipe connection.FocasIpcException— surfaces Host ErrorResponse frames as typed exceptions.Host side (.NET 4.8 x86)
Backend/IFocasBackend— the Host's view of a FOCAS session (Open/Close/Read/Write/PmcBitWrite/Probe).Backend/FakeFocasBackend— in-memory, RMW-aware bit writes; used by tests + as an operational stub.Backend/UnconfiguredFocasBackend— safe default returning structured failure pointing atdocs/v2/focas-deployment.md.Ipc/FwlibFrameHandler— replaces StubFrameHandler with real dispatch; catches backend exceptions as ErrorResponse instead of tearing down the pipe.Program.cspicks backend fromOTOPCUA_FOCAS_BACKENDenv var.Tests (13 new)
IpcLoopback— connect happy, connect rejection, read decode, write round-trip, PMC bit-write routes to RMW frame, probe, ErrorResponse → typed exception.Total FOCAS-family tests green: 205 (172 driver + 24 Shared + 9 Host).
What's deferred
FwlibHostedBackend) — hardware-dependent.