feat(core): FILIUS' web server and web browser after Java, measured against Java

The servers share ServerAnwendung's frame (server.ts); the web server serves
/webserver with virtual hosts, the browser loads a page and its images over
one connection to port 80 (web.ts); HTTP in Java's text form (http.ts).
WebRun records eleven stories on the new web-lan network, with the server's
files; webJava.test.ts plays them card by card. A program's close is a
request, as Java's schliessen. Not taken from Java: /../ serving any file of
the host; an unreadable request closing the connection without a word.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-01 16:53:00 +00:00
co-authored by Claude Opus 5.5
parent de3a1d4dfe
commit 4cd5749350
33 changed files with 53601 additions and 216 deletions
+19
View File
@@ -20,7 +20,14 @@ import type {
ManualRoute,
SimpleClientConfiguration,
SwitchConfiguration,
WebServerConfiguration,
} from './config.js';
import type { VirtualFileSystem } from '../model/virtualFileSystem.js';
/** An installed web server: its configuration, and whether it is switched on (Java: WebServer.aktiv). */
export interface WebServerSnapshot extends WebServerConfiguration {
readonly isActive: boolean;
}
/** An installed echo server: its port, and whether it is switched on (Java: ServerBaustein.aktiv). */
export interface EchoServerSnapshot extends EchoServerConfiguration {
@@ -76,6 +83,12 @@ export interface TopologySnapshot {
readonly echoServersByNodeId: ReadonlyMap<Id, EchoServerSnapshot>;
/** The installed generic clients (ClientBaustein) with the server they last talked to, by node. */
readonly simpleClientsByNodeId: ReadonlyMap<Id, SimpleClientConfiguration>;
/** The installed web servers (WebServer), by node. */
readonly webServersByNodeId: ReadonlyMap<Id, WebServerSnapshot>;
/** The nodes with the web browser installed (WebBrowser). */
readonly webBrowserNodeIds: ReadonlySet<Id>;
/** Each node's files, which its programs read (a web server its pages). */
readonly fileSystemsByNodeId: ReadonlyMap<Id, VirtualFileSystem>;
}
export interface TopologySnapshotInput {
@@ -94,6 +107,9 @@ export interface TopologySnapshotInput {
ipForwardingByNodeId?: ReadonlyMap<Id, boolean>;
echoServersByNodeId?: ReadonlyMap<Id, EchoServerSnapshot>;
simpleClientsByNodeId?: ReadonlyMap<Id, SimpleClientConfiguration>;
webServersByNodeId?: ReadonlyMap<Id, WebServerSnapshot>;
webBrowserNodeIds?: ReadonlySet<Id>;
fileSystemsByNodeId?: ReadonlyMap<Id, VirtualFileSystem>;
}
export function topologySnapshot(input: TopologySnapshotInput): TopologySnapshot {
@@ -113,6 +129,9 @@ export function topologySnapshot(input: TopologySnapshotInput): TopologySnapshot
ipForwardingByNodeId: input.ipForwardingByNodeId ?? new Map(),
echoServersByNodeId: input.echoServersByNodeId ?? new Map(),
simpleClientsByNodeId: input.simpleClientsByNodeId ?? new Map(),
webServersByNodeId: input.webServersByNodeId ?? new Map(),
webBrowserNodeIds: input.webBrowserNodeIds ?? new Set(),
fileSystemsByNodeId: input.fileSystemsByNodeId ?? new Map(),
};
}