added websocket broadcast
This commit is contained in:
@@ -55,6 +55,7 @@ application: SDApplication = SDApplication(
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
devices: list[SDDevice] = []
|
devices: list[SDDevice] = []
|
||||||
|
websocket_connections: list[web.WebSocketResponse] = []
|
||||||
|
|
||||||
#
|
#
|
||||||
# Database
|
# Database
|
||||||
@@ -70,13 +71,15 @@ table_cursor.execute("""
|
|||||||
x integer,
|
x integer,
|
||||||
y integer,
|
y integer,
|
||||||
svg text
|
svg text
|
||||||
)""")
|
);""")
|
||||||
table_cursor.execute("""
|
table_cursor.execute("""
|
||||||
CREATE TABLE IF NOT EXISTS button_states(
|
CREATE TABLE IF NOT EXISTS button_states(
|
||||||
key integer PRIMARY KEY,
|
key integer PRIMARY KEY,
|
||||||
state integer,
|
state integer,
|
||||||
state_update text
|
state_update text
|
||||||
)""")
|
);""")
|
||||||
|
table_cursor.execute("DELETE FROM button_states;")
|
||||||
|
database_first.commit()
|
||||||
table_cursor.close()
|
table_cursor.close()
|
||||||
database_first.close()
|
database_first.close()
|
||||||
|
|
||||||
@@ -290,8 +293,14 @@ async def websocket_handler(request: web.Request):
|
|||||||
"""Handle websocket."""
|
"""Handle websocket."""
|
||||||
web_socket = web.WebSocketResponse()
|
web_socket = web.WebSocketResponse()
|
||||||
await web_socket.prepare(request)
|
await web_socket.prepare(request)
|
||||||
|
|
||||||
|
await web_socket.send_str(encode({"event": "connected", "args": {}}))
|
||||||
|
|
||||||
|
websocket_connections.append(web_socket)
|
||||||
|
|
||||||
async for msg in web_socket:
|
async for msg in web_socket:
|
||||||
if msg.type == aiohttp.WSMsgType.TEXT:
|
if msg.type == aiohttp.WSMsgType.TEXT:
|
||||||
|
print(msg.data)
|
||||||
if msg.data == "close":
|
if msg.data == "close":
|
||||||
await web_socket.close()
|
await web_socket.close()
|
||||||
else:
|
else:
|
||||||
@@ -299,13 +308,16 @@ async def websocket_handler(request: web.Request):
|
|||||||
elif msg.type == aiohttp.WSMsgType.ERROR:
|
elif msg.type == aiohttp.WSMsgType.ERROR:
|
||||||
print(
|
print(
|
||||||
f"Websocket connection closed with exception {web_socket.exception()}")
|
f"Websocket connection closed with exception {web_socket.exception()}")
|
||||||
|
|
||||||
|
websocket_connections.pop(web_socket)
|
||||||
return web_socket
|
return web_socket
|
||||||
|
|
||||||
|
|
||||||
# TODO: Websocket broadcast not working yet
|
|
||||||
def websocket_broadcast(message: str):
|
def websocket_broadcast(message: str):
|
||||||
"""Send a message to each websocket client."""
|
"""Send a message to each websocket client."""
|
||||||
print(f"BROADCAST: {message}")
|
print(f"BROADCAST: {message}")
|
||||||
|
for connection in websocket_connections:
|
||||||
|
asyncio.run(connection.send_str(message))
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -472,3 +484,5 @@ def start():
|
|||||||
# TODO: SSDP server
|
# TODO: SSDP server
|
||||||
server = SSDPServer(SD_SSDP)
|
server = SSDPServer(SD_SSDP)
|
||||||
server.serve_forever()
|
server.serve_forever()
|
||||||
|
|
||||||
|
# TODO: 10 second broadcast with status
|
||||||
|
|||||||
Reference in New Issue
Block a user