| vnode.dom.scrollIntoView() | vnode.dom.scrollIntoView() | ||||
| } | } | ||||
| const prettyTime = (ts) => { | const prettyTime = (ts) => { | ||||
| return ts.slice(11, 19) | |||||
| const dt = new Date(ts) | |||||
| const H = `0${dt.getHours()}`.slice(-2) | |||||
| const M = `0${dt.getMinutes()}`.slice(-2) | |||||
| const S = `0${dt.getSeconds()}`.slice(-2) | |||||
| return `${H}:${M}:${S}` | |||||
| } | } | ||||
| const Video = { | const Video = { | ||||
| appendStream: ({username, stream}) => ({dom}) => { | appendStream: ({username, stream}) => ({dom}) => { |
| while True: | while True: | ||||
| data = await recv_json(ws) | data = await recv_json(ws) | ||||
| ts = datetime.datetime.now().isoformat() | |||||
| ts = datetime.datetime.now().isoformat() + 'Z' | |||||
| emit = partial(send_json_many, kind=data['kind'], value=data.get('value'), ts=ts) | emit = partial(send_json_many, kind=data['kind'], value=data.get('value'), ts=ts) | ||||
| broadcast = partial(emit, targets=sockets) | broadcast = partial(emit, targets=sockets) | ||||
| reply = partial(emit, targets=[ws]) | reply = partial(emit, targets=[ws]) |