63 lines
2.7 KiB
Markdown
63 lines
2.7 KiB
Markdown
# VoiceCat .NET implementation
|
|
|
|
This is the supported VoiceCat implementation. It contains the protocol, TLS and media
|
|
cryptography, server, client state, codec/DSP bindings, audio engine, and headless CLI.
|
|
|
|
## Build and test
|
|
|
|
Stage the small native Opus/RNNoise library, then build the managed solution:
|
|
|
|
```powershell
|
|
./dotnet/build-native.ps1
|
|
dotnet restore dotnet/VoiceCat.slnx --locked-mode
|
|
dotnet build dotnet/VoiceCat.slnx -c Release --no-restore
|
|
dotnet test dotnet/VoiceCat.slnx -c Release --no-build
|
|
./dotnet/check-licenses.ps1
|
|
```
|
|
|
|
The native source lives in `native/media` and `native/rnnoise`; build output is staged under
|
|
`dotnet/artifacts/native`. The shim exposes only fixed Opus/DRED and RNNoise entry points. It
|
|
does not contain protocol, networking, cryptography, client state, or server behavior.
|
|
|
|
For an explicit native build:
|
|
|
|
```bash
|
|
cmake -S native/media -B dotnet/artifacts/native-build -DCMAKE_BUILD_TYPE=Release
|
|
cmake --build dotnet/artifacts/native-build --target voicecat_media --parallel 2
|
|
cmake --install dotnet/artifacts/native-build --component DotnetMedia \
|
|
--prefix dotnet/artifacts/native
|
|
```
|
|
|
|
## Projects
|
|
|
|
- `VoiceCat.Protocol` — generated protobuf types and bounded control framing.
|
|
- `VoiceCat.Crypto` — BouncyCastle TLS 1.3/exporters, TOFU, identity, AEAD, replay protection,
|
|
and Argon2id.
|
|
- `VoiceCat.Codec` / `VoiceCat.Dsp` — managed owners of the narrow native media ABI.
|
|
- `VoiceCat.Audio` — jitter, loss recovery, mixing, input activation, and PCM rings.
|
|
- `VoiceCat.Core` — managed client connection and session state.
|
|
- `VoiceCat.Server` — TLS control, encrypted UDP relay, SQLite state, administration, and CLI.
|
|
- `VoiceCat.Cli` — supported interactive and deterministic headless client.
|
|
- `VoiceCat.Tests` — managed unit, integration, allocation, and end-to-end behavior tests.
|
|
|
|
`proto/voicecat.proto` is the only protobuf schema. Generated C# is build output.
|
|
|
|
## Run
|
|
|
|
```powershell
|
|
dotnet run --project dotnet/src/VoiceCat.Server -- --data-dir ./voicecat-data
|
|
dotnet run --project dotnet/src/VoiceCat.Cli -- \
|
|
--host 127.0.0.1 --port 8384 --nickname Alice --trust-first
|
|
```
|
|
|
|
Use `--help` on either executable for current options. Server publishing is handled by
|
|
`dotnet/publish-server.ps1` and the platform packaging files under `packaging/`.
|
|
|
|
## Compatibility policy
|
|
|
|
The managed implementation is the source of truth. Frozen vectors under
|
|
`tests/VoiceCat.Tests/Fixtures` protect concrete wire, Argon2id, and RNNoise behavior, but the
|
|
repository no longer builds or tests against the retired C++ implementation. Protocol or
|
|
persistence changes must be versioned when current supported releases need migration; they do
|
|
not need to retain compatibility with unsupported pre-rewrite releases.
|