Skip to content

Commit ebb7ca7

Browse files
committed
Added example for SSEResponse
1 parent 28ae6e5 commit ebb7ca7

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed

examples/httpserver_sse.py

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# SPDX-FileCopyrightText: 2023 Dan Halbert for Adafruit Industries
2+
#
3+
# SPDX-License-Identifier: Unlicense
4+
5+
from time import monotonic
6+
import microcontroller
7+
import socketpool
8+
import wifi
9+
10+
from adafruit_httpserver import Server, Request, Response, SSEResponse, GET
11+
12+
13+
pool = socketpool.SocketPool(wifi.radio)
14+
server = Server(pool, debug=True)
15+
16+
17+
sse_response: SSEResponse = None
18+
next_event_time = monotonic()
19+
20+
HTML_TEMPLATE = """
21+
<html lang="en">
22+
<head>
23+
<title>Server-Sent Events Client</title>
24+
</head>
25+
<body>
26+
<script>
27+
const eventSource = new EventSource('/connect-client');
28+
29+
eventSource.onmessage = event => console.log('Event data:', event.data);
30+
eventSource.onerror = error => console.error('SSE error:', error);
31+
</script>
32+
</body>
33+
</html>
34+
"""
35+
36+
37+
@server.route("/client", GET)
38+
def client(request: Request):
39+
return Response(request, HTML_TEMPLATE, content_type="text/html")
40+
41+
42+
@server.route("/connect-client", GET)
43+
def connect_client(request: Request):
44+
global sse_response
45+
46+
if sse_response is not None:
47+
sse_response.close() # Close any existing connection
48+
49+
sse_response = SSEResponse(request)
50+
51+
return sse_response
52+
53+
54+
server.start(str(wifi.radio.ipv4_address))
55+
while True:
56+
server.poll()
57+
58+
# Send an event every second
59+
if sse_response is not None and next_event_time < monotonic():
60+
cpu_temp = round(microcontroller.cpu.temperature, 2)
61+
sse_response.send_event(f"CPU: {cpu_temp}°C")
62+
next_event_time = monotonic() + 1

0 commit comments

Comments
 (0)