| */ | */ | ||||
| const wire = (message) => State.websocket.send(JSON.stringify(message)) | const wire = (message) => State.websocket.send(JSON.stringify(message)) | ||||
| const signal = (message) => dispatchEvent(new CustomEvent(message.kind, {detail: message})) | const signal = (message) => dispatchEvent(new CustomEvent(message.kind, {detail: message})) | ||||
| const signalPeerRequest = () => wire({kind: 'peerInfo', value: {type: 'request'}}) | |||||
| const signalPeerStop = (username) => signal({kind: 'peerInfo', value: {type: 'stop'}, source: username}) | const signalPeerStop = (username) => signal({kind: 'peerInfo', value: {type: 'stop'}, source: username}) | ||||
| const listen = (kind, handler) => addEventListener(kind, handler) | const listen = (kind, handler) => addEventListener(kind, handler) | ||||
| listen('login', ({detail}) => State.username = detail.value) | listen('login', ({detail}) => State.username = detail.value) | ||||
| oldTracks.forEach(track => {track.stop(); localStream.removeTrack(track)}) | oldTracks.forEach(track => {track.stop(); localStream.removeTrack(track)}) | ||||
| document.querySelectorAll('video').forEach(video => video.srcObject = video.srcObject) | document.querySelectorAll('video').forEach(video => video.srcObject = video.srcObject) | ||||
| wire({kind: 'peerInfo', value: {type: 'request'}}) | |||||
| signalPeerRequest() | |||||
| } | } | ||||
| const onPeerInfo = async ({detail: message}) => { | const onPeerInfo = async ({detail: message}) => { | ||||
| const localStream = State.streams[State.username] | const localStream = State.streams[State.username] | ||||
| ), | ), | ||||
| m('label', | m('label', | ||||
| m('input#mute-check', {onchange: setSelectedMedia, type: 'checkbox'}), | m('input#mute-check', {onchange: setSelectedMedia, type: 'checkbox'}), | ||||
| 'mute' | |||||
| m('mute'), | |||||
| ), | ), | ||||
| ), | ), | ||||
| m('.videos', {className: VideoOptions.anyFullScreen()}, | m('.videos', {className: VideoOptions.anyFullScreen()}, | ||||
| m('button', {onclick: Login.sendLogout}, 'Logout'), | m('button', {onclick: Login.sendLogout}, 'Logout'), | ||||
| m('.user-list', State.online.map(username => | m('.user-list', State.online.map(username => | ||||
| m('details', | m('details', | ||||
| m('summary', username), | |||||
| m('summary', | |||||
| m('span', username), | |||||
| ), | |||||
| m(VideoOptions, {username}), | m(VideoOptions, {username}), | ||||
| ), | ), | ||||
| )), | )), |