feat: add suitelink client runtime and test harness

This commit is contained in:
Joseph Doherty
2026-03-16 16:46:32 -04:00
parent 731bfe2237
commit c278f98496
27 changed files with 2515 additions and 15 deletions

58
README.md Normal file
View File

@@ -0,0 +1,58 @@
# 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`, and `string`
- write (`POKE`) encoding for `bool`, `int32`, `float32`, and `string`
- 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
- automatic reconnect
- background receive loop / production retry behavior
- validated support for richer System Platform data types such as `double`, `int64`, or `DateTime`
## Build
```bash
dotnet build /Users/dohertj2/Desktop/suitelinkclient/SuiteLink.Client.slnx -c Release
```
## Test
Unit tests:
```bash
dotnet test /Users/dohertj2/Desktop/suitelinkclient/SuiteLink.Client.slnx -v minimal
```
Focused protocol tests:
```bash
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](/Users/dohertj2/Desktop/suitelinkclient/tests/SuiteLink.Client.IntegrationTests/README.md) for:
- required environment variables
- tag configuration
- enabling live round-trip tests for `bool`, `int`, `float`, and `string`
## Notes
- 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.