Round 280: MQTT ext, WebSocket ext, SSE ext, HTTP/2 ext, QUIC ext (20 commands)

ober

1fc35fac9ae6cc80853560034c3c3da6b19ef241

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 090b055..d836c9d 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -4583,6 +4583,31 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | ebib-import-file | :orange_circle: | Import file into Ebib |
 | ebib-push-citation | :orange_circle: | Push Ebib citation to buffer |
 
+### Round 280 — MQTT ext, WebSocket ext, SSE ext, HTTP/2 ext, QUIC ext
+
+| Command | Status | Description |
+|---------|--------|-------------|
+| mqtt-publish | :orange_circle: | Publish to MQTT topic |
+| mqtt-subscribe | :orange_circle: | Subscribe to MQTT topic |
+| mqtt-topics | :orange_circle: | List MQTT topics |
+| mqtt-broker-status | :orange_circle: | Check MQTT broker status |
+| websocket-connect | :orange_circle: | Connect to WebSocket |
+| websocket-send | :orange_circle: | Send WebSocket message |
+| websocket-close | :orange_circle: | Close WebSocket connection |
+| websocket-listen | :orange_circle: | Listen for WebSocket messages |
+| sse-connect | :orange_circle: | Connect to SSE stream |
+| sse-subscribe | :orange_circle: | Subscribe to SSE events |
+| sse-send | :orange_circle: | Send SSE event |
+| sse-close | :orange_circle: | Close SSE connection |
+| http2-request | :orange_circle: | Make HTTP/2 request |
+| http2-push | :orange_circle: | HTTP/2 server push |
+| http2-stream | :orange_circle: | Open HTTP/2 stream |
+| http2-settings | :orange_circle: | Show HTTP/2 settings |
+| quic-connect | :orange_circle: | Connect via QUIC |
+| quic-send | :orange_circle: | Send QUIC data |
+| quic-stream | :orange_circle: | Open QUIC stream |
+| quic-close | :orange_circle: | Close QUIC connection |
+
 ### Round 279 — Kafka ext, RabbitMQ ext, NATS ext, Pulsar ext, ZeroMQ ext
 
 | Command | Status | Description |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index f105224..104d78e 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -21883,4 +21883,50 @@
 
 (def (cmd-zeromq-proxy app)
   (let* ((echo (app-state-echo app)))
-    (echo-message! echo "ZeroMQ: starting proxy")))
\ No newline at end of file
+    (echo-message! echo "ZeroMQ: starting proxy")))
+
+;;; Round 280 — SSE ext, HTTP/2 ext, QUIC ext (batch 2)
+
+(def (cmd-sse-send app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "SSE: sending event")))
+
+(def (cmd-sse-close app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "SSE: closing connection")))
+
+(def (cmd-http2-request app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "URL: "
+      (lambda (url)
+        (echo-message! echo (str "HTTP/2: requesting " url))))))
+
+(def (cmd-http2-push app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "HTTP/2: server push")))
+
+(def (cmd-http2-stream app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "HTTP/2: opening stream")))
+
+(def (cmd-http2-settings app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "HTTP/2: showing settings")))
+
+(def (cmd-quic-connect app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Address: "
+      (lambda (addr)
+        (echo-message! echo (str "QUIC: connecting to " addr))))))
+
+(def (cmd-quic-send app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "QUIC: sending data")))
+
+(def (cmd-quic-stream app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "QUIC: opening stream")))
+
+(def (cmd-quic-close app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "QUIC: closing connection")))
\ No newline at end of file
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index c9a2a3f..a9e2551 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -22520,3 +22520,53 @@
       (lambda (subj)
         (echo-message! echo (str "NATS: subscribing to " subj))))))
 
+;;; Round 280 — MQTT ext, WebSocket ext, SSE ext, HTTP/2 ext, QUIC ext (batch 1)
+
+(def (cmd-mqtt-publish app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Topic: "
+      (lambda (topic)
+        (echo-message! echo (str "MQTT: publishing to " topic))))))
+
+(def (cmd-mqtt-subscribe app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Topic: "
+      (lambda (topic)
+        (echo-message! echo (str "MQTT: subscribing to " topic))))))
+
+(def (cmd-mqtt-topics app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "MQTT: listing topics")))
+
+(def (cmd-mqtt-broker-status app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "MQTT: checking broker status")))
+
+(def (cmd-websocket-connect app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "URL: "
+      (lambda (url)
+        (echo-message! echo (str "WebSocket: connecting to " url))))))
+
+(def (cmd-websocket-send app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "WebSocket: sending message")))
+
+(def (cmd-websocket-close app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "WebSocket: closing connection")))
+
+(def (cmd-websocket-listen app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "WebSocket: listening for messages")))
+
+(def (cmd-sse-connect app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "URL: "
+      (lambda (url)
+        (echo-message! echo (str "SSE: connecting to " url))))))
+
+(def (cmd-sse-subscribe app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "SSE: subscribing to events")))
+
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 32c881a..ef9c6fb 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -7297,4 +7297,25 @@
   (register-command! 'zeromq-receive cmd-zeromq-receive)
   (register-command! 'zeromq-monitor cmd-zeromq-monitor)
   (register-command! 'zeromq-proxy cmd-zeromq-proxy)
+  ;; Round 280
+  (register-command! 'mqtt-publish cmd-mqtt-publish)
+  (register-command! 'mqtt-subscribe cmd-mqtt-subscribe)
+  (register-command! 'mqtt-topics cmd-mqtt-topics)
+  (register-command! 'mqtt-broker-status cmd-mqtt-broker-status)
+  (register-command! 'websocket-connect cmd-websocket-connect)
+  (register-command! 'websocket-send cmd-websocket-send)
+  (register-command! 'websocket-close cmd-websocket-close)
+  (register-command! 'websocket-listen cmd-websocket-listen)
+  (register-command! 'sse-connect cmd-sse-connect)
+  (register-command! 'sse-subscribe cmd-sse-subscribe)
+  (register-command! 'sse-send cmd-sse-send)
+  (register-command! 'sse-close cmd-sse-close)
+  (register-command! 'http2-request cmd-http2-request)
+  (register-command! 'http2-push cmd-http2-push)
+  (register-command! 'http2-stream cmd-http2-stream)
+  (register-command! 'http2-settings cmd-http2-settings)
+  (register-command! 'quic-connect cmd-quic-connect)
+  (register-command! 'quic-send cmd-quic-send)
+  (register-command! 'quic-stream cmd-quic-stream)
+  (register-command! 'quic-close cmd-quic-close)
 )