add websocket
This commit is contained in:
parent
74111257ca
commit
aaf988df53
@ -1,4 +1,5 @@
|
||||
import asyncio
|
||||
import dataclasses
|
||||
import logging
|
||||
from threading import Thread
|
||||
|
||||
@ -74,6 +75,7 @@ class Web(Node):
|
||||
def __init__(self, level=logging.INFO):
|
||||
super(Web, self).__init__(level=level)
|
||||
self.wss: list[WebSocket] = []
|
||||
self.arg = ImageArgMsg(sender='frontend', t_end=123)
|
||||
|
||||
def custom_setup(self):
|
||||
self.router = APIRouter()
|
||||
@ -86,12 +88,14 @@ class Web(Node):
|
||||
async def websocket_endpoint(self, websocket: WebSocket):
|
||||
await websocket.accept()
|
||||
self.wss.append(websocket)
|
||||
t = ImageArgMsg('z', t_end=1000)
|
||||
try:
|
||||
while True:
|
||||
data = await websocket.receive_json()
|
||||
t.t_end = data['v']
|
||||
self.send(t)
|
||||
if data['type'] == 'ImageArgMsg':
|
||||
t = dataclasses.replace(self.arg)
|
||||
t.sender = data['sender']
|
||||
t.t_start = data['t_start']
|
||||
self.send(t)
|
||||
except WebSocketDisconnect:
|
||||
self.wss.remove(websocket)
|
||||
|
||||
@ -109,9 +113,9 @@ class Web(Node):
|
||||
while True:
|
||||
msg = self.recv()
|
||||
if isinstance(msg, ImageArgMsg):
|
||||
if msg.sender != 'z':
|
||||
self.boardcast(msg.__dict__)
|
||||
logger.info(msg)
|
||||
if msg.sender != 'frontend':
|
||||
self.arg = msg
|
||||
self.boardcast(msg.dict)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
@ -95,6 +95,12 @@ class Msg:
|
||||
def encode_msg(self):
|
||||
return self.magic() + self.eid() + self.encode()
|
||||
|
||||
@property
|
||||
def dict(self):
|
||||
d = self.__dict__.copy()
|
||||
d['type'] = self.__class__.__name__
|
||||
return d
|
||||
|
||||
|
||||
class HeaderByteMsg(Msg):
|
||||
header: dict
|
||||
|
||||
@ -223,7 +223,9 @@ class RfMat:
|
||||
return self.copy(self.m.get())
|
||||
|
||||
def crop(self, t_start: int, t_end: int):
|
||||
return self.copy(self.m[:, t_start:t_end])
|
||||
ts = sorted([0, t_start, self.duration])[1]
|
||||
te = sorted([ts, t_end, self.duration])[1]
|
||||
return self.copy(self.m[:, ts:te])
|
||||
|
||||
def crop_center(self, center: float, width: float):
|
||||
mmin = max(0, int(center - width / 2))
|
||||
|
||||
Loading…
Reference in New Issue
Block a user