feat: add resilient reconnect and catch-up replay
This commit is contained in:
15
README.md
15
README.md
@@ -10,6 +10,10 @@ Current implementation targets the normal SuiteLink tag protocol and supports:
|
||||
- subscribe and unadvise flows
|
||||
- update decoding for `bool`, `int32`, `float32`, and `string`
|
||||
- write (`POKE`) encoding for `bool`, `int32`, `float32`, and `string`
|
||||
- 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
|
||||
@@ -18,8 +22,9 @@ This repository does not currently support:
|
||||
|
||||
- AlarmMgr / alarms and events
|
||||
- secure SuiteLink V3 / TLS transport
|
||||
- automatic reconnect
|
||||
- background receive loop / production retry behavior
|
||||
- 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`, or `DateTime`
|
||||
|
||||
## Build
|
||||
@@ -56,3 +61,9 @@ See [README.md](/Users/dohertj2/Desktop/suitelinkclient/tests/SuiteLink.Client.I
|
||||
|
||||
- The repository includes fixture-backed protocol tests under [Fixtures](/Users/dohertj2/Desktop/suitelinkclient/tests/SuiteLink.Client.Tests/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, `WriteAsync` fails 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.
|
||||
|
||||
Reference in New Issue
Block a user