Initial commit
This commit is contained in:
52
README.md
Normal file
52
README.md
Normal file
@@ -0,0 +1,52 @@
|
||||
# CommTester – Prototype: bidirektionale IPC + Streaming (C#)
|
||||
|
||||
Dieser Prototyp zeigt **bidirektionale Interprozesskommunikation** zwischen einer **WPF Elternanwendung** und **mehreren Kindprozessen** – inklusive **Streaming** (fortlaufende Log-/Progress-Nachrichten).
|
||||
|
||||
## Architektur
|
||||
|
||||
- **Parent (WPF)**: `ParentWpf`
|
||||
- startet mehrere Child-Prozesse
|
||||
- hostet pro Child einen **Named Pipe Server** (Windows)
|
||||
- sendet Commands (Ping, StartWork, CancelWork)
|
||||
- empfängt Streaming-Events (Log, Progress, Result)
|
||||
|
||||
- **Child (Console)**: `ChildWorker`
|
||||
- verbindet sich als **Named Pipe Client**
|
||||
- verarbeitet Commands
|
||||
- streamt Log/Progress/Result zurück
|
||||
|
||||
- **Shared IPC**: `CommIpc`
|
||||
- Protokoll: **4-Byte Längenprefix (Little Endian)** + **UTF-8 JSON** (`System.Text.Json`)
|
||||
- Message-Envelope: `IpcFrame { kind, correlationId, payload, timestamp }`
|
||||
|
||||
## Quickstart
|
||||
|
||||
1. Build (einmalig):
|
||||
|
||||
- Solution: `CommTester.slnx`
|
||||
|
||||
2. Parent starten:
|
||||
|
||||
- Starte `ParentWpf` (Debug oder Run).
|
||||
|
||||
3. In der UI:
|
||||
|
||||
- **Start 3 Children**: startet 3 Kindprozesse und verbindet per Pipe
|
||||
- **Ping Selected**: Ping/Pong roundtrip
|
||||
- **Start Work**: Child streamt Progress + Logs (mehrere Frames)
|
||||
- **Cancel Work**: cancelt laufende Arbeit im Child
|
||||
|
||||
## Pipe-Namen
|
||||
|
||||
Der Pipe-Name wird pro Child eindeutig gebildet:
|
||||
|
||||
- `CommTester_<parentPid>_<childId>`
|
||||
|
||||
Damit kann ein Parent mehrere Childs parallel bedienen.
|
||||
|
||||
## Erweiterungsideen
|
||||
|
||||
- Request/Response-Routing (CorrelationId) mit Awaitables im Parent
|
||||
- Reconnect-Strategien / Heartbeats
|
||||
- Backpressure (Channel für Outbound Frames)
|
||||
- Auth/ACL (bei Bedarf), Logging, Telemetrie
|
||||
Reference in New Issue
Block a user