add websocket

This commit is contained in:
remilia 2025-04-22 15:02:40 +08:00
parent 74111257ca
commit aaf988df53
3 changed files with 19 additions and 7 deletions

View File

@ -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__':

View File

@ -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

View File

@ -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))