3.1 KiB
3.1 KiB
SuiteLink Client
Cross-platform .NET 10 C# client for AVEVA SuiteLink tag operations.
Scope
Current implementation targets the normal SuiteLink tag protocol and supports:
- startup handshake and connect message encoding
- subscribe and unadvise flows
- update decoding for
bool,int32,float32, andstring - write (
POKE) encoding forbool,int32,float32, andstring - background receive loop for subscription updates without manual polling
- automatic reconnect with durable subscription replay after runtime disconnects
- best-effort latest-value catch-up replay after reconnect when enabled
- policy-based reconnect retry timing with exponential backoff and jitter support
- client/session/transport layers suitable for macOS, Linux, and Windows
Unsupported
This repository does not currently support:
- AlarmMgr / alarms and events
- secure SuiteLink V3 / TLS transport
- write queuing while reconnecting
- full outage-history replay of every missed value
- validated reconnect behavior against a live AVEVA server deployment
- validated support for richer System Platform data types such as
double,int64, orDateTime
Build
dotnet build /Users/dohertj2/Desktop/suitelinkclient/SuiteLink.Client.slnx -c Release
Test
Unit tests:
dotnet test /Users/dohertj2/Desktop/suitelinkclient/SuiteLink.Client.slnx -v minimal
Focused protocol tests:
dotnet test /Users/dohertj2/Desktop/suitelinkclient/SuiteLink.Client.slnx --filter Protocol -v minimal
Integration
Live integration tests are safe by default and only run when explicitly enabled with environment variables.
See README.md for:
- required environment variables
- tag configuration
- enabling live round-trip tests for
bool,int,float, andstring
Notes
- The repository includes fixture-backed protocol tests under Fixtures.
- Protocol assumptions derived from reverse engineering are intentionally isolated in codec classes and tests so they can be refined against live captures later.
- Normal subscription use does not require calling
ProcessIncomingAsync; the runtime loop dispatches updates in the background. - After a runtime disconnect, the client enters
Reconnecting, rebuilds the transport/session startup sequence, replays durable subscriptions, and resumes dispatch without caller resubscription. - Reconnect timing is driven by
SuiteLinkRetryPolicy; the default policy retries immediately, then uses bounded exponential backoff with jitter. - Catch-up replay is best-effort latest-value refresh only. It does not represent every value missed during the outage window.
- If the client is reconnecting after a runtime disconnect,
WriteAsyncfails fast until the session is ready again. - Reconnect behavior is currently verified with fixture-backed and fake-transport tests; live AVEVA validation is still required, especially for mixed-mode deployments and server-specific timing.