Update README: browser layout, iPad/Safari, WebSocket disconnect
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01SH2D4LRuCnhLSzoYerAfJX
This commit is contained in:
@@ -80,6 +80,14 @@ ws/ Minimal WebSocket pub/sub layer: server
|
|||||||
(single- and multi-user), client, and a
|
(single- and multi-user), client, and a
|
||||||
keyed message dispatcher (e.g. "Sensor",
|
keyed message dispatcher (e.g. "Sensor",
|
||||||
"Heater", "TempCtrl", "Stirrer", "Pot", "Sud").
|
"Heater", "TempCtrl", "Stirrer", "Pot", "Sud").
|
||||||
|
Abrupt client disconnects (no WebSocket close
|
||||||
|
frame — the normal case for browser tab closes
|
||||||
|
and Safari session teardowns) are handled
|
||||||
|
gracefully: `User.send()` catches
|
||||||
|
`ConnectionClosed` silently, and `handler_recv()`
|
||||||
|
exits cleanly on it, so a vanishing client never
|
||||||
|
produces an uncaught exception or "connection
|
||||||
|
handler failed" log noise.
|
||||||
|
|
||||||
scripts/demos/ Standalone, eyeballed-plot demos (matplotlib)
|
scripts/demos/ Standalone, eyeballed-plot demos (matplotlib)
|
||||||
exercising components/* in isolation — pid/,
|
exercising components/* in isolation — pid/,
|
||||||
@@ -610,6 +618,17 @@ for the desktop app's native file dialogs), Start/Pause/Stop, and Confirm
|
|||||||
(a plain `<dialog>` pops with the step's message on `WAIT_USER` and sends
|
(a plain `<dialog>` pops with the step's message on `WAIT_USER` and sends
|
||||||
Confirm when dismissed) are all wired up.
|
Confirm when dismissed) are all wired up.
|
||||||
|
|
||||||
|
The page carries a `<meta name="viewport">` tag so Safari and other mobile
|
||||||
|
browsers render at device CSS pixels rather than the 980 px virtual layout
|
||||||
|
they otherwise default to — essential for touch usability on iPad. The
|
||||||
|
header is a two-row layout: the top row holds the host address input,
|
||||||
|
Connect button, connection status, and the three large (76 × 76 px)
|
||||||
|
circular transport buttons (Start/Pause/Stop) with the countdown to their
|
||||||
|
right; the New/Load/Save file buttons occupy their own row directly below.
|
||||||
|
The LCD panel (Temperature/Heat rate/Power) uses a four-column grid, with
|
||||||
|
unit labels (°C, °C/min, W) in a dedicated column to the right of the Soll
|
||||||
|
value rather than embedded in the row labels.
|
||||||
|
|
||||||
The browser client applies the "state is server-only" principle strictly
|
The browser client applies the "state is server-only" principle strictly
|
||||||
throughout `web/app.js`: every slider, readout, and checkbox is updated
|
throughout `web/app.js`: every slider, readout, and checkbox is updated
|
||||||
only when a push arrives from the server, never speculatively on user
|
only when a push arrives from the server, never speculatively on user
|
||||||
|
|||||||
Reference in New Issue
Block a user