feat(core): programs' threads, and FILIUS' echo server and generic client after Java, measured against Java

Programs run as generators that yield what they wait for (threads.ts); the
engine resumes them after every event. TCP connect, send, receive, accept
and name resolution exist as such steps; the blocking calls wrap them.
EchoRun records eight stories in Java FILIUS, frames, tables and each
program's window lines; echoJava.test.ts plays them card by card. Not
taken from Java: a connection without a route hangs for ever; a server
switched off leaves its connections' last FIN unanswered.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-01 16:27:44 +00:00
co-authored by Claude Opus 5.5
parent 0abce60aef
commit de3a1d4dfe
24 changed files with 13454 additions and 28 deletions
+34
View File
@@ -546,3 +546,37 @@ Gemessen (01.10.2026):
in der Javas Threads senden; mit acht Clients stauen sich die Broadcasts,
ein Frame erreicht die Karten bis zu rund 450 ms versetzt, und Javas
Mitschnitt verliert eigene Frames eines Clients.
## Echo-Server und einfacher Client (F3.1)
`EchoRun` installiert auf dem Netz von `tcp-lan` Filius' Echo-Server
(`ServerBaustein`) auf .10, eingeschaltet auf Port 55555, bevor die
Simulation startet (wie eine Datei ihn lädt), und den einfachen Client
(`ClientBaustein`) auf .20 und .30. Es macht die Aufrufe wie die Fenster:
`verbinden` und `trennen` gehen an den Thread des Programms, `senden` läuft
im Thread des Aufrufers, bis es zurückkehrt. Es schreibt nach
`echo-java-<ablauf>.java.json` die Frames jeder Karte, Javas Tabellen und
jede Zeile, die ein Programm in sein Fenster schreibt (seine Beobachter),
dazu die Aufrufe. Abläufe: `exchange`, `closedPort`, `noRoute`,
`notConnected`, `serverOff`, `reconnect`, `twoClients`, `otherPort`.
Gemessen (01.10.2026):
* `Anwendung.starten` meldet seinen Beobachtern `null`; das Fenster
überspringt es.
* Der Client merkt die Verbindung erst beim nächsten Blick
(`TCPSocket.verbinden` schläft 100 ms), der Server ebenso eine neue
Verbindung (`ServerSocket.oeffnen`) und dass er ausgeschaltet wurde
(„Server-Socket geschlossen“ rund 20 ms nach dem Ausschalten).
* Ohne Route zum Ziel stirbt der Socket-Thread des Clients an der
`RouteNotFoundException`; `verbinden` wartet ewig, das Fenster bleibt
stumm, kein Frame geht hinaus.
* Ausgeschaltet schließt der Server seine Verbindungen mit FIN, gibt aber
zugleich den Port frei (`ServerSocket.schliessen`); das FIN des Clients
findet keinen Socket mehr und bleibt ohne ACK.
* Aus- und sofort wieder eingeschaltet (ohne Pause) merkt Javas Schleife das
Ausschalten nicht und lauscht weiter auf dem alten Port, auch wenn er
geändert wurde. Wer im Fenster den Port wechselt, lässt Sekunden
dazwischen; so misst es `otherPort`.
* Der Client sendet nur ein SYN (wie bei `TcpRun`, `closedPort`).