better ecg server impl

This commit is contained in:
2024-04-23 07:35:24 -04:00
parent ca857c8d09
commit 8964203f09
3 changed files with 73 additions and 50 deletions

View File

@@ -1,34 +1,46 @@
import time
import websockets import websockets
import asyncio import asyncio
from pojagi_dsp.channel.ecg.generator.wavetable import ECGWaveTableSynthesizer
from pojagi_dsp.channel.ecg.generator.wavetable.sinus import SinusWaveTable, TachycardiaWaveTable
# Server data
PORT = 7890 PORT = 7890
print("Server listening on Port " + str(PORT))
# A set of connected ws clients async def consumer_handler(websocket):
connected = set() async for message in websocket:
print(f"message received: {message}")
# The main behavior function for this server async def producer_handler(websocket):
async def echo(websocket, path): ecg = ECGWaveTableSynthesizer(
print("A client just connected") tables={
print(f"path: {path}") (0,90): SinusWaveTable(),
# Store a copy of the connected client (70, 300): TachycardiaWaveTable(),
connected.add(websocket) },
# Handle incoming messages heart_rate=70,
try: srate=50,
async for message in websocket: )
print("Received message from client: " + message) while True:
# Send a response to all connected clients except sender try:
for conn in connected: message = next(ecg)
if conn != websocket: await websocket.send(str(message))
await conn.send("Someone said: " + message) time.sleep(0.01)
# Handle disconnecting clients except websockets.exceptions.ConnectionClosed as e:
except websockets.exceptions.ConnectionClosed as e: print("A client just disconnected")
print("A client just disconnected") break
finally:
connected.remove(websocket) async def handler(websocket, path):
while True:
print(f"New connection. Path: {path}")
consumer_task = asyncio.create_task(consumer_handler(websocket))
producer_task = asyncio.create_task(producer_handler(websocket))
done, pending = await asyncio.wait(
[consumer_task, producer_task],
return_when=asyncio.FIRST_COMPLETED,
)
for task in pending:
task.cancel()
# Start the server # Start the server
start_server = websockets.serve(echo, "0.0.0.0", PORT) start_server = websockets.serve(handler, "0.0.0.0", PORT)
asyncio.get_event_loop().run_until_complete(start_server) asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever() asyncio.get_event_loop().run_forever()

View File

@@ -1,3 +1,4 @@
.gitignore
pyproject.toml pyproject.toml
src/medtrace_synth/__main__.py src/medtrace_synth/__main__.py
src/medtrace_synth.egg-info/PKG-INFO src/medtrace_synth.egg-info/PKG-INFO

View File

@@ -1,36 +1,46 @@
import time
import websockets import websockets
import asyncio import asyncio
from pojagi_dsp.channel.ecg.generator.wavetable import ECGWaveTableSynthesizer
from pojagi_dsp.channel.ecg.generator.wavetable.sinus import SinusWaveTable, TachycardiaWaveTable
# Server data
PORT = 7890 PORT = 7890
print("Server listening on Port " + str(PORT))
# A set of connected ws clients async def consumer_handler(websocket):
connected = set() async for message in websocket:
print(f"message received: {message}")
# The main behavior function for this server async def producer_handler(websocket):
async def echo(websocket, path): ecg = ECGWaveTableSynthesizer(
print("A client just connected") tables={
print(f"path: {path}") (0,90): SinusWaveTable(),
# Store a copy of the connected client (70, 300): TachycardiaWaveTable(),
connected.add(websocket) },
# Handle incoming messages heart_rate=70,
try: srate=50,
async for message in websocket: )
print("Received message from client: " + message) while True:
# Send a response to all connected clients except sender try:
for conn in connected: message = next(ecg)
if conn != websocket: await websocket.send(str(message))
await conn.send("Someone said: " + message) time.sleep(0.01)
else: except websockets.exceptions.ConnectionClosed as e:
await conn.send(f"You said: {message}") print("A client just disconnected")
# Handle disconnecting clients break
except websockets.exceptions.ConnectionClosed as e:
print("A client just disconnected") async def handler(websocket, path):
finally: while True:
connected.remove(websocket) print(f"New connection. Path: {path}")
consumer_task = asyncio.create_task(consumer_handler(websocket))
producer_task = asyncio.create_task(producer_handler(websocket))
done, pending = await asyncio.wait(
[consumer_task, producer_task],
return_when=asyncio.FIRST_COMPLETED,
)
for task in pending:
task.cancel()
# Start the server # Start the server
start_server = websockets.serve(echo, "0.0.0.0", PORT) start_server = websockets.serve(handler, "0.0.0.0", PORT)
asyncio.get_event_loop().run_until_complete(start_server) asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever() asyncio.get_event_loop().run_forever()