Skip to content

Commit 4047ef5

Browse files
committed
Added example for Websocket
1 parent 1e1ad58 commit 4047ef5

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed

examples/httpserver_websocket.py

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
# SPDX-FileCopyrightText: 2023 Dan Halbert for Adafruit Industries
2+
#
3+
# SPDX-License-Identifier: Unlicense
4+
5+
from time import monotonic
6+
import socketpool
7+
import wifi
8+
9+
from adafruit_httpserver import Server, Request, Response, Websocket, GET
10+
11+
12+
pool = socketpool.SocketPool(wifi.radio)
13+
server = Server(pool, debug=True)
14+
15+
16+
websocket: Websocket = None
17+
next_message_time = monotonic()
18+
19+
HTML_TEMPLATE = """
20+
<html lang="en">
21+
<head>
22+
<title>Websocket Client</title>
23+
</head>
24+
<body>
25+
<input id="message" type="text" placeholder="Message..."><br>
26+
<button id="send">Send</button>
27+
28+
29+
<script>
30+
const messageInput = document.querySelector('#message');
31+
const sendButton = document.querySelector('#send');
32+
33+
let ws = new WebSocket('ws://' + location.host + '/connect-websocket');
34+
35+
ws.onopen = () => console.log('WebSocket connection opened');
36+
ws.onerror = error => console.error('WebSocket error:', error);
37+
ws.onmessage = event => console.log('Received message from server: ', event.data);
38+
39+
let interval = setInterval(() => ws.send("Hello from client"), 1000);
40+
41+
ws.onclose = x => {
42+
console.log('WebSocket connection closed');
43+
clearInterval(interval);
44+
};
45+
46+
sendButton.onclick = () => ws.send(messageInput.value);
47+
</script>
48+
</body>
49+
</html>
50+
"""
51+
52+
53+
@server.route("/client", GET)
54+
def client(request: Request):
55+
return Response(request, HTML_TEMPLATE, content_type="text/html")
56+
57+
58+
@server.route("/connect-websocket", GET)
59+
def connect_client(request: Request):
60+
global websocket
61+
62+
if websocket is not None:
63+
websocket.close() # Close any existing connection
64+
65+
websocket = Websocket(request)
66+
67+
return websocket
68+
69+
70+
server.start(str(wifi.radio.ipv4_address))
71+
while True:
72+
server.poll()
73+
74+
# Check for incoming messages from client
75+
if websocket is not None:
76+
if (message := websocket.receive(True)) is not None:
77+
print("Received message from client:", message)
78+
79+
# Send a message every second
80+
if websocket is not None and next_message_time < monotonic():
81+
websocket.send_message("Hello from server")
82+
next_message_time = monotonic() + 1

0 commit comments

Comments
 (0)