Add video abstraction class

This commit is contained in:
2024-02-17 20:06:37 -06:00
parent 21b1bf7992
commit db7c8c4577
7 changed files with 259 additions and 23 deletions

View File

@@ -50,32 +50,37 @@ def run_server():
import asyncio
import websockets
from multiprocessing import Process, Queue
from util import fprint
import uuid
connected_clients = set()
connected_clients = {}
async def handler(websocket, path, to_server_queue, from_server_queue):
# Register websocket connection
connected_clients.add(websocket)
client_id = str(uuid.uuid4())
connected_clients[client_id] = websocket
try:
# Handle incoming messages
async for message in websocket:
#print(f"Received message: {message}")
from_server_queue.put(message) # Put received message into from_server_queue
print(client_id)
from_server_queue.put((client_id, message))
finally:
# Unregister websocket connection
connected_clients.remove(websocket)
if client_id in connected_clients:
del connected_clients[client_id]
print(f"Client {client_id} connection closed")
async def send_messages(to_server_queue):
while True:
if not to_server_queue.empty():
message = to_server_queue.get()
if connected_clients: # Check if there are any connected clients
#await asyncio.wait([client.send(message) for client in connected_clients])
#await [client.send(message) for client in connected_clients]
for client in connected_clients:
client_id, message = to_server_queue.get()
if client_id in connected_clients: # Send message to specific client
await connected_clients[client_id].send(message)
elif len(connected_clients) > 0: # Broadcast message to all clients
for client in connected_clients.values():
await client.send(message)
await asyncio.sleep(0.1) # Prevent the loop from running too fast
await asyncio.sleep(0.001)
def websocket_server(to_server_queue, from_server_queue):
start_server = websockets.serve(lambda ws, path: handler(ws, path, to_server_queue, from_server_queue), "localhost", 9000)