feat(core): Gnutella joining after Java, measured against Java

GnutellaRun lets Java's PeerToPeerAnwendung join peers on terminal-net.
The core's gnutella.ts does the same: a ping in Java's text format to
port 6346, a pong back, the ping sent on to the other peers and their
pongs back the way it came, at most the program's number of peers.

Departure from Java: a ping that comes a second time gets no pong and
its connection stays (Java's worker throws on the missing pong).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-02 12:29:54 +00:00
co-authored by Claude Opus 5.5
parent 9d42b90157
commit b4a95e6cac
18 changed files with 37937 additions and 3 deletions
+2
View File
@@ -39,6 +39,7 @@ export function projectSnapshot(project: ImportedProject): TopologySnapshot {
emailServers.set(nodeId, { domain: configuration.domain, accounts: configuration.accounts, isActive: project.activePrograms.get(nodeId)?.has('emailServer') === true });
}
const emailClients = new Map([...project.emailClientConfigurations].filter(([nodeId]) => project.installedPrograms.get(nodeId)?.has('emailClient') === true));
const gnutella = new Map([...project.gnutellaConfigurations].filter(([nodeId]) => project.installedPrograms.get(nodeId)?.has('gnutella') === true));
const terminals = new Set([...project.installedPrograms].filter(([, programs]) => programs.has('commandPrompt')).map(([nodeId]) => nodeId));
const webBrowsers = new Set([...project.installedPrograms].filter(([, programs]) => programs.has('webBrowser')).map(([nodeId]) => nodeId));
return topologySnapshot({
@@ -66,6 +67,7 @@ export function projectSnapshot(project: ImportedProject): TopologySnapshot {
emailServersByNodeId: emailServers,
emailClientsByNodeId: emailClients,
terminalNodeIds: terminals,
gnutellaByNodeId: gnutella,
fileSystemsByNodeId: project.virtualFileSystems,
});
}