[wip] now display user's camera
next tricky thing is connecting users
This commit is contained in:
Vendored
+23
-62
@@ -10,71 +10,32 @@
|
||||
*
|
||||
* @module
|
||||
*/
|
||||
let st = { whoami: "",
|
||||
roster: [] };
|
||||
main();
|
||||
async function main() {
|
||||
// start websocket immediately
|
||||
let ws;
|
||||
let init = document.getElementById('init');
|
||||
let init_join = document.getElementById('init-join');
|
||||
// handle button click
|
||||
init_join.addEventListener('click', function () {
|
||||
init.hidden = true;
|
||||
document.getElementById('run').hidden = false;
|
||||
ws = new WebSocket('/ws/webrtc');
|
||||
ws.onopen = function (e) { console.log('ws open'); };
|
||||
ws.onclose = function (e) { console.warn('ws closed'); };
|
||||
ws.onerror = function (e) { console.error('ws error:', e); };
|
||||
ws.onmessage =
|
||||
function (e) {
|
||||
// console.log('ws message:', e.data);
|
||||
let message = JSON.parse(e.data);
|
||||
handle_ws_msg(message);
|
||||
};
|
||||
});
|
||||
console.log('peepy');
|
||||
let video = await getUserCamera();
|
||||
console.log('poopy');
|
||||
console.log('poopu');
|
||||
let moi = document.getElementById('me');
|
||||
moi.srcObject = video;
|
||||
console.log('poopa');
|
||||
}
|
||||
function handle_ws_msg(message) {
|
||||
console.log('message from server:', message);
|
||||
switch (message[0]) {
|
||||
case "whoami":
|
||||
st.whoami = message[1];
|
||||
break;
|
||||
case "roster":
|
||||
st.roster = message[1];
|
||||
break;
|
||||
default:
|
||||
console.warn("unknown message", message);
|
||||
/**
|
||||
* Try to get the user's camera
|
||||
*
|
||||
* tries to get screenshare if user camera not available for whatever reason
|
||||
*
|
||||
* chimps out if
|
||||
* - not on https
|
||||
* - user says no
|
||||
*/
|
||||
async function getUserCamera() {
|
||||
if (!(navigator.mediaDevices)) {
|
||||
console.error('navigator.mediaDevices is null; user not on https or something');
|
||||
}
|
||||
render_state();
|
||||
}
|
||||
function ws_send_json(ws, x) {
|
||||
let s = JSON.stringify(x, undefined, 4);
|
||||
console.log('sending:\n', s);
|
||||
ws.send(s);
|
||||
}
|
||||
function render_state() {
|
||||
console.log('st', st);
|
||||
// whoami
|
||||
document.getElementById('whoami').innerText = st.whoami;
|
||||
//
|
||||
let roster_ul = document.getElementById('roster-ul');
|
||||
let newChildren = [];
|
||||
for (let nick of st.roster) {
|
||||
if (!(nick === st.whoami)) {
|
||||
let li = nickkk(nick);
|
||||
newChildren.push(li);
|
||||
}
|
||||
}
|
||||
roster_ul.replaceChildren(...newChildren);
|
||||
}
|
||||
function nickkk(nick) {
|
||||
let li = document.createElement('li');
|
||||
li.innerText += nick;
|
||||
li.innerText += ' ';
|
||||
let call_a = document.createElement('button');
|
||||
call_a.innerText = 'call';
|
||||
li.appendChild(call_a);
|
||||
return li;
|
||||
let availableDevices = await navigator.mediaDevices.enumerateDevices();
|
||||
console.log(availableDevices);
|
||||
return await navigator.mediaDevices.getUserMedia({ video: true, audio: false });
|
||||
// return await navigator.mediaDevices.getDisplayMedia();
|
||||
}
|
||||
//# sourceMappingURL=webrtc.js.map
|
||||
Reference in New Issue
Block a user