<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.megbes.de/index.php?action=history&amp;feed=atom&amp;title=MUTEC_%E2%80%93_Pong</id>
	<title>MUTEC – Pong - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.megbes.de/index.php?action=history&amp;feed=atom&amp;title=MUTEC_%E2%80%93_Pong"/>
	<link rel="alternate" type="text/html" href="https://wiki.megbes.de/index.php?title=MUTEC_%E2%80%93_Pong&amp;action=history"/>
	<updated>2026-11-03T18:27:11Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in MegBes Wiki</subtitle>
	<generator>MediaWiki 1.45.6</generator>
	<entry>
		<id>https://wiki.megbes.de/index.php?title=MUTEC_%E2%80%93_Pong&amp;diff=129&amp;oldid=prev</id>
		<title>Clawtronics: Pong: Gastberechtigungen, Spielprotokoll und Inbetriebnahme dokumentiert</title>
		<link rel="alternate" type="text/html" href="https://wiki.megbes.de/index.php?title=MUTEC_%E2%80%93_Pong&amp;diff=129&amp;oldid=prev"/>
		<updated>2026-10-10T12:16:20Z</updated>

		<summary type="html">&lt;p&gt;Pong: Gastberechtigungen, Spielprotokoll und Inbetriebnahme dokumentiert&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= MUTEC · Pong — Stand 10.10.2026 =&lt;br /&gt;
&lt;br /&gt;
== Aktivieren ==&lt;br /&gt;
&lt;br /&gt;
Das Frontend wird unter https://www.tinetronics.de/mutec/pong/ veröffentlicht. Der Electron-Reiter pong auf PC 166 verwendet display.html und den bestehenden DISPLAY_KEY. Den Schlüssel nicht weitergeben; er ist nie im Gast-QR-Code enthalten.&lt;br /&gt;
&lt;br /&gt;
# Eine laufende MUTEC-Anwendung mit „Zur Auswahl“ verlassen.&lt;br /&gt;
# Auf dem VPS als root ausführen:&lt;br /&gt;
   &amp;lt;code&amp;gt;bash /home/clawtronics/mutec-pong-update/apply-pong-update.sh&amp;lt;/code&amp;gt;&lt;br /&gt;
# Die abschließende Statusmeldung muss pong:true, flight:true und returnToTrailer:true enthalten.&lt;br /&gt;
# Electron neu starten und das MUTEC-Menü am Smartphone neu laden. Pong wird sichtbar, sobald /mutec-control-api/capabilities pong:true meldet.&lt;br /&gt;
# Spieler 1 meldet sich mit einem MegBes-Ticket an und wählt Pong. Finger auf der großen Touch-Fläche hoch/runter bewegen.&lt;br /&gt;
# Spieler 2 scannt den QR-Code auf dem Bildschirm und drückt „Rechten Schläger übernehmen“. Er braucht kein MegBes-Ticket.&lt;br /&gt;
&lt;br /&gt;
Kein neuer nginx-Pfad, API-Schlüssel oder MegBes-Backend nötig. Der separate Relay erhält access.js, protocol.js, server.js, pong-guests.js und test/relay.test.js. Update mit Sicherung, Prüfung und Rücksetzen bei Fehlern. Umgebungsdatei, DISPLAY_KEY, Abhängigkeiten und systemd-Konfiguration bleiben erhalten. Die existierende Karten-, Aqua-, Medien- und Papierflug-Steuerung bleibt verfügbar.&lt;br /&gt;
&lt;br /&gt;
== Spiel ==&lt;br /&gt;
&lt;br /&gt;
Das Spiel startet gegen den Computer. Spieler 1 steuert links; ein Gast ersetzt den Computer rechts. Wer zuerst sieben Punkte erzielt, gewinnt. Spieler 1 darf das Spiel neu starten; der Gast kann nur rechts steuern oder seinen eigenen Gastzugang verlassen. Bei Gast-Trennung oder inaktivem rechten Browser übernimmt die KI. Fehlen aktive Eingaben von Spieler 1 länger als 1,2 Sekunden, wird pausiert. Der Spielstand wird auf beide Smartphones zurückgemeldet.&lt;br /&gt;
&lt;br /&gt;
„Zur Auswahl“ beendet die Pong-Sitzung, schickt 50-Trailer und gibt Station 50 frei. Alle Gastberechtigungen dieser Sitzung verfallen dabei. Auch Ticket-Widerruf, Station-IDLE und Sitzungsablauf beenden den Gastzugang über dieselbe bestehende Überprüfung. Der Gast kann die Station nicht reservieren oder deren Ticket-Sitzung verlängern.&lt;br /&gt;
&lt;br /&gt;
Auswahl: Feature pong, UDP 166-pong und 50-maps. 50-maps ist der vorhandene HDMI-Umschaltbefehl. Electron views.json erhält id/udpSignal pong; URL https://www.tinetronics.de/mutec/pong/display.html#displayKey=BESTEHENDER_DISPLAY_KEY.&lt;br /&gt;
&lt;br /&gt;
== QR-Code und Gastberechtigung ==&lt;br /&gt;
&lt;br /&gt;
Eine angemeldete Pong-Anzeige fordert über WebSocket eine Einladung für die aktive, durch ein Ticket reservierte Pong-Sitzung an. Eine Einladung ist 90 Sekunden gültig und wird danach automatisch ersetzt. Sie enthält einen kryptografischen Zufallswert mit 256 Bit. Dieser Wert steht im URL-Fragment von guest.html, wird vom Browser aus der Adresszeile entfernt und nicht als HTTP-Abfrageparameter, Referrer oder an einen externen QR-Dienst weitergegeben. Der QR-Code wird lokal mit qrcode-generator 1.4.4 (MIT-Lizenz beigelegt) erzeugt.&lt;br /&gt;
&lt;br /&gt;
POST /mutec-control-api/pong/guest mit dem Einladungstoken im Authorization-Header tauscht eine Einladung einmalig gegen einen separaten Gasttoken. Parallele Beitrittsversuche werden in der bestehenden Relay-Warteschlange nacheinander geprüft; genau einer gewinnt. Gasttoken gilt maximal 15 Minuten und ausschließlich während seiner Elternsitzung. Ein Platz ist nach dem Einlösen bis zur WebSocket-Verbindung 15 Sekunden reserviert. Es kann nur eine Gast-WebSocket-Verbindung zugleich bestehen. Bei Trennung ist Wiederverbindung mit dem bisherigen Token möglich; wenn ein neuer Gast den Platz übernimmt, verliert der alte Token seine Gültigkeit.&lt;br /&gt;
&lt;br /&gt;
Gäste haben Rolle guest und Feature pong. Ihre Token werden von den APIs für Ticket-Steuerung, Stationserneuerung und UDP nicht akzeptiert. Gast-Nachrichten werden ausschließlich als Position des rechten Schlägers weitergeleitet. Eine selbst gewählte Seite wird verworfen. Gäste dürfen keine Spielaktionen, Kartenereignisse oder Spielstände senden. POST /pong/guest/leave widerruft nur den eigenen Gastzugang.&lt;br /&gt;
&lt;br /&gt;
Der Gast verwendet weder /enter-system noch die MegBes-Ticket-Anmeldung. Eltern-Ticket und DISPLAY_KEY werden nicht im Gast-Frontend oder QR-Code offengelegt.&lt;br /&gt;
&lt;br /&gt;
== WebSocket-Protokoll und Module ==&lt;br /&gt;
&lt;br /&gt;
Join v1 mit feature:pong und role:controller|display|guest. Der bestehende ControlClient unterstützt die neue Rolle und Pong-Einladungen. Karten- und Papierflug-Nachrichten bleiben vom Pong-Kanal getrennt.&lt;br /&gt;
&lt;br /&gt;
* pong.paddle, Smartphone → Relay: {y:0..1, active:boolean}, ca. 25/s. Relay ergänzt side:left|right anhand der authentifizierten Rolle.&lt;br /&gt;
* pong.action, nur Ticket-Controller → Anzeige: {action:restart, id:UUID}.&lt;br /&gt;
* pong.status, nur Anzeige → beide Spieler: {left:0..7, right:0..7, phase:waiting|playing|paused|finished, opponent:computer|guest, gameId:UUID}, ca. 6/s.&lt;br /&gt;
* pong.invite, nur angemeldete Anzeige: Anfrage v1/type:pong.invite; Antwort enthält entweder einen Gast-Einladungstoken mit Ablauf und gameId oder null.&lt;br /&gt;
* presence enthält für Pong zusätzlich guest:boolean und gameId. Keine Token in Presence.&lt;br /&gt;
&lt;br /&gt;
Die Anzeige berechnet Ballphysik, KI und Punkte. simulation.js ist unabhängig von DOM und Netzwerk; paddle.js enthält die gemeinsame Touch-Bedienung für links/rechts; guest.js verwaltet ausschließlich den Gastbeitritt; pong-guests.js kapselt das Berechtigungsmodell des Relay. Neue Eingaben werden fortlaufend übertragen; alte Pong-Impulse werden nicht nach einer Wiederverbindung abgespielt. Neuladen der Anzeige setzt den Spielstand zurück. Keine dauerhafte Bestenliste.&lt;br /&gt;
&lt;br /&gt;
Probespiel am PC ohne Ticket oder Stationssteuerung: https://www.tinetronics.de/mutec/pong/display.html?preview=1 (Pfeiltasten/W/S). Der Probemodus erstellt keinen echten Gastzugang.&lt;br /&gt;
&lt;br /&gt;
== Prüfung und ausstehende Abnahme ==&lt;br /&gt;
&lt;br /&gt;
36 automatische Prüfungen: 17 Relay-Prüfungen (einschließlich einmaliger QR-Nutzung, gleichzeitiger Beitritte, Gast-Timeout, Rechtebegrenzung, Seitenzuordnung, Ticket-Widerruf und Gast-Ende beim Verlassen), zehn Ticket-Prüfungen, vier Papierflug-Prüfungen und fünf Pong-Physikprüfungen. Browserprobe mit drei Ansichten: Computergegner, QR-Beitritt, rechter Schläger, Spielstand-Rückkanal, Besitzer-Neustart und Rückkehr zur KI beim Gast-Aussteigen. Keine echten Hardware-Befehle in diesen Prüfungen.&lt;br /&gt;
&lt;br /&gt;
Noch erforderlich: root-Installation auf dem VPS und Test mit zwei echten Smartphones sowie Electron/Station 50. Der QR-Code in den Prüfbildern stammt aus dem isolierten lokalen Test-Relay und ist kein Zugang zum Live-System.&lt;br /&gt;
&lt;br /&gt;
Quellen: https://github.com/kazuhikoarase/qrcode-generator und https://developer.mozilla.org/en-US/docs/Web/API/Pointer_events&lt;br /&gt;
&lt;br /&gt;
Siehe auch [[MUTEC – WebSocket-Steuerung]], [[MUTEC – Papierflug]].&lt;br /&gt;
[[Kategorie:MegBes]]&lt;br /&gt;
[[Kategorie:Frontend]]&lt;/div&gt;</summary>
		<author><name>Clawtronics</name></author>
	</entry>
</feed>