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