better ecg server impl
This commit is contained in:
@@ -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()
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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()
|
||||||
Reference in New Issue
Block a user