function RegisterVideoHandlers(conn: WsConn) { conn.RegisterAction("seeking", function (video: HTMLVideoElement, val: any) { video.currentTime = val; }); conn.RegisterAction("pause", function (video: HTMLVideoElement, val: any) { video.pause(); video.currentTime = val; }); conn.RegisterAction("play", function (video: HTMLVideoElement, val: any) { video.currentTime = val; video.play(); }); conn.RegisterAction("tell", function (video: HTMLVideoElement) { video.pause(); conn.conn.send( JSON.stringify({ target: getSelector(video), event: "pause", value: video.currentTime, }) ); }); } function RegisterUiHandlers( conn: WsConn, setMessages: (messages: MessageT[]) => void, messages: MessageT[], setMovieUrl: (movieUrl: string) => void, videoRef: React.MutableRefObject, myName: string, setServerId: (serverId: string) => void, clients: Record, setClients: (clients: Record) => void, signal: (filter: string, data: Object) => void, userMedia: UserMedia, advertise: (name: string, filter: string) => void ) { conn.RegisterAction("message", (_: any, val: MessageT) => { setMessages([...messages, val]); }); conn.RegisterAction("change", (_: any, val: string) => { setMovieUrl(val); videoRef.current.load(); }); conn.RegisterAction("registered", (_: any, val: {who: string}) => { setServerId(val.who); conn.conn.send( JSON.stringify({event: "discover", value: {id: val.who, name: myName}}) ); }); conn.RegisterAction("signal", (_: any, val: {id: string; data: Object}) => { clients[val.id]?.receive(val.data); }); conn.RegisterAction("client_close", (_: any, val: {who: string}) => { const {[val.who]: client, ...others} = clients; client?.cleanup(); setClients(others); }); conn.RegisterAction("advertise", (_: any, val: PeerT) => { let peer = clients[val.id]; if (!peer) { peer = new Peer(val.id, val.name, signal, userMedia); peer.connect(); } peer.name = val.name; setClients({...clients, [val.id]: peer}); }); conn.RegisterAction("discover", (_: any, val: PeerT) => { const newPeer = new Peer(val.id, val.name, signal, userMedia); setClients({...clients, [val.id]: newPeer}); advertise(myName, val.id); }); }