Files
md-show/plan.md
T

112 lines
4.7 KiB
Markdown
Raw Normal View History

2026-08-17 18:04:10 +02:00
---
2026-08-17 18:23:05 +02:00
name: Plugin Server Data Plan
overview: Stay on retail TeamSpeak + Client Plugin SDK (API 26). Improve what we send through TeamSpeak (and optionally a small authority) so less is ad-hoc client-only — without building a custom ServerLib app.
2026-08-17 18:04:10 +02:00
todos:
2026-08-17 18:23:05 +02:00
- id: inventory-wire
content: Inventory current CEPOS fields + hub_parser keys (what already goes via TS)
2026-08-17 18:04:10 +02:00
status: pending
2026-08-17 18:23:05 +02:00
- id: protocol-design
content: Design versioned plugin-command + hub schema for extra server-side policy/data
2026-08-17 18:04:10 +02:00
status: pending
2026-08-17 18:23:05 +02:00
- id: implement-one
content: Implement one additive send path (one message type or hub keys) — Golden Rule
2026-08-17 18:04:10 +02:00
status: pending
2026-08-17 18:23:05 +02:00
- id: optional-hybrid
content: "Only if chosen: sketch hybrid authority audible-set API (still client PCM)"
2026-08-17 18:04:10 +02:00
status: pending
2026-08-17 18:23:05 +02:00
- id: no-serverlib
content: Do not revive ClientLib/ServerLib custom app
2026-08-17 18:04:10 +02:00
status: pending
isProject: false
---
2026-08-17 18:23:05 +02:00
# Better “send to server” on Plugin SDK (API 26)
2026-08-17 18:04:10 +02:00
2026-08-17 18:23:05 +02:00
**Discarded:** Option B (own ClientLib/ServerLib app). Deleted old plan file.
2026-08-17 18:04:10 +02:00
2026-08-17 18:23:05 +02:00
**Stay on:** retail TeamSpeak + plugin (`PLUGIN_API_VERSION 26`), branch `tsmain` / current V8 path.
2026-08-17 18:04:10 +02:00
2026-08-17 18:23:05 +02:00
## What “server” can mean here
2026-08-17 18:04:10 +02:00
2026-08-17 18:23:05 +02:00
| Meaning | Reality with Plugin SDK |
2026-08-17 18:15:55 +02:00
|---|---|
2026-08-17 18:23:05 +02:00
| **A. Retail TeamSpeak server** | Relay only. Plugin commands (`sendPluginCommand`) go client→server→clients. Channel description holds hub config. **No game proximity engine on TS.** |
| **B. Optional game voice authority** | Your own small process (or Conan dedicated server). Clients upload state; it returns audible sets. Plugin still applies PCM/3D. Not TeamSpeak ServerLib. |
2026-08-17 18:15:55 +02:00
2026-08-17 18:23:05 +02:00
This plan focuses on **A first** (more/better data over TeamSpeak), then optional **B** if you want central decisions.
## What V8 already sends today
- **CEPOS** via `sendPluginCommand("CEPOS:…")` — position, facing, voice distance (~56 B base64), throttled + keepalive ([`ts3_cepos.c`](src/ts/proximity/ts3_cepos.c))
- **CEDRAIN** — wakeup tick only
- **Hub settings** — read from **root channel description** (server admin writes config; plugin parses)
Proximity math and mute/gain stay **on each client**.
## What Plugin API 26 cannot do
- Run proximity inside retail `ts3server`
- True packet drop like ServerLib `ts3server_setClientWhisperList`
- Replace client PCM as the hearing mechanism without leaving Plugin SDK
## Improvements worth planning (ranked)
### 1. Richer / cleaner plugin-command protocol (TeamSpeak relay)
Keep CEPOS, add typed messages (compact binary/base64), e.g.:
- `CEPOS:` — position (as now; maybe version bump if fields added)
- `CEAUTH:` / identity bind hints (Steam/Conan id hash — still spoofable without B)
- `CEMODE:` — voice mode change events (less poll noise)
- `CEZONE:` — local zone enter/leave if useful for peers
- `CEPING:` — RTT / stale detection beyond keepalive
Rules: still `sendPluginCommand`; throttle; bounds-check; no secrets in cleartext.
### 2. Push more config to the TeamSpeak server (channel description / hub)
Today hub already carries ranges/zones. Expand systematically:
- Documented key schema (versioned)
- Radio defaults, fail-closed policy, feature flags
- Single writer (server admin / description) — clients only read
This is the cleanest “server owns policy” path **without** a custom backend.
### 3. Optional: client whisper lists (limited)
`requestClientSetWhisperList` exists in Plugin SDK. Possible for **overlays** (admin whisper), not as main proximity router (permissions + “whisper disables channel talk”). Plan as experiment only after protocol work.
### 4. Optional hybrid authority (if you want “server computes”)
2026-08-17 18:15:55 +02:00
```text
2026-08-17 18:23:05 +02:00
Conan / clients -> Voice Authority (your process)
Authority -> audible set per listener
Plugin applies mute/gain/3D (PCM) as today
TeamSpeak = voice transport + CEPOS or authority uplink
2026-08-17 18:15:55 +02:00
```
2026-08-17 18:23:05 +02:00
Fail closed if authority down. Positions still untrusted unless Conan dedicated server feeds the authority.
2026-08-17 18:15:55 +02:00
2026-08-17 18:23:05 +02:00
## Explicitly out of scope
2026-08-17 18:04:10 +02:00
2026-08-17 18:23:05 +02:00
- Custom TeamSpeak SDK 3.5 ClientLib/ServerLib product
- Branch `ts3-Testing` ServerLib bootstrap
- Expecting retail `ts3server` to run Conan proximity
2026-08-17 18:04:10 +02:00
2026-08-17 18:23:05 +02:00
## Suggested first milestone (if you approve later)
2026-08-17 18:04:10 +02:00
2026-08-17 18:23:05 +02:00
1. Inventory current CEPOS + hub keys (freeze wire format)
2. Design versioned plugin-command + hub schema (doc only)
3. Implement one additive message type or hub keys (one function)
4. Only then consider hybrid authority or whisper-list experiment
2026-08-17 18:04:10 +02:00
2026-08-17 18:23:05 +02:00
## Docs
2026-08-17 18:04:10 +02:00
2026-08-17 18:23:05 +02:00
- Keep [`vergleichs.md`](vergleichs.md) as historical Option B comparison, or add a short “discarded” banner when implementing
- New living doc under `doku/` when code starts (project rule)
2026-08-17 18:04:10 +02:00
2026-08-17 18:23:05 +02:00
## Decision needed from you (before any code)
2026-08-17 18:04:10 +02:00
2026-08-17 18:23:05 +02:00
Prefer **A-only** (better plugin commands + hub config on retail TS), or **A + optional hybrid authority** for central audible sets?