wip
This commit is contained in:
parent
cc95fc5829
commit
b6436c84ee
@ -13,8 +13,61 @@
|
||||
main();
|
||||
|
||||
async function
|
||||
main()
|
||||
main
|
||||
()
|
||||
: Promise<void>
|
||||
{
|
||||
let pc: RTCPeerConnection = new RTCPeerConnection();
|
||||
// start websocket immediately
|
||||
let ws = new WebSocket('/ws/webrtc');
|
||||
|
||||
// grab document elements
|
||||
let init = document.getElementById('init') as HTMLDivElement;
|
||||
let peers = document.getElementById('peers') as HTMLDivElement;
|
||||
|
||||
let init_name = document.getElementById('init-name') as HTMLInputElement;
|
||||
let init_join = document.getElementById('init-join') as HTMLButtonElement;
|
||||
|
||||
// handle button click
|
||||
init_join.addEventListener('click',
|
||||
function() {
|
||||
handle_join(init, init_name, peers, ws);
|
||||
}
|
||||
);
|
||||
|
||||
// handle message from ws
|
||||
ws.onopen = function(e) { console.log('ws open:', e); };
|
||||
ws.onclose = function(e) { console.log('ws closed:', e); };
|
||||
ws.onerror = function(e) { console.error('ws error:', e); };
|
||||
ws.onmessage = function(e) { console.log('ws message', e); };
|
||||
}
|
||||
|
||||
async function
|
||||
handle_join
|
||||
(init : HTMLDivElement,
|
||||
init_name : HTMLInputElement,
|
||||
peers : HTMLDivElement,
|
||||
ws : WebSocket)
|
||||
: Promise<void>
|
||||
{
|
||||
console.log('connecting...');
|
||||
let user_name: string = init_name.value.trim();
|
||||
console.log('username:', user_name);
|
||||
|
||||
ws_send_json(ws, ['username', user_name]);
|
||||
|
||||
init.hidden = true;
|
||||
peers.hidden = false;
|
||||
}
|
||||
|
||||
|
||||
function
|
||||
ws_send_json
|
||||
(ws : WebSocket,
|
||||
x : any)
|
||||
: void
|
||||
{
|
||||
let s: string = JSON.stringify(x, undefined, 4);
|
||||
console.log('sending:\n', s);
|
||||
|
||||
ws.send(s);
|
||||
}
|
||||
|
||||
@ -16,13 +16,16 @@
|
||||
<h1 class="content-title">FEWD: webrtc demo</h1>
|
||||
|
||||
<div id="init">
|
||||
<label for="initName">username:</label>
|
||||
<input autofocus id="initName" type="text"></input>
|
||||
<button id="initSubmit">Join</button>
|
||||
<label for="init-name">username:</label>
|
||||
<input autofocus id="init-name" type="text" value='alice'>
|
||||
<button id="init-join">connect</button>
|
||||
</div>
|
||||
|
||||
|
||||
<div id="peers" hidden>
|
||||
Peers
|
||||
<h1>Peers</h1>
|
||||
|
||||
<ul id="peers-ul"></ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@ -233,6 +233,7 @@ handle_request(Sock, R = #request{method = M, path = P}, Received) when M =/= un
|
||||
route(Sock, get, Route, Request, Received) ->
|
||||
case Route of
|
||||
<<"/ws/echo">> -> ws_echo(Sock, Request) , Received;
|
||||
<<"/ws/webrtc">> -> ws_webrtc(Sock, Request) , Received;
|
||||
<<"/">> -> route_static(Sock, <<"/index.html">>) , Received;
|
||||
_ -> route_static(Sock, Route) , Received
|
||||
end;
|
||||
@ -279,6 +280,34 @@ respond_static(Sock, not_found) ->
|
||||
fd_httpd_utils:http_err(Sock, 404).
|
||||
|
||||
|
||||
%% ------------------------------
|
||||
%% webrtc
|
||||
%% ------------------------------
|
||||
|
||||
|
||||
ws_webrtc(Sock, Request) ->
|
||||
try
|
||||
case qhl_ws:handshake(Request) of
|
||||
{ok, Response} ->
|
||||
fd_httpd_utils:respond(Sock, Response),
|
||||
ws_webrtc_loop(Sock);
|
||||
Error ->
|
||||
tell("ws_webrtc: error: ~tp", [Error]),
|
||||
fd_httpd_utils:http_err(Sock, 400)
|
||||
end
|
||||
catch
|
||||
X:Y:Z ->
|
||||
tell(error, "CRASH ws_webrtc: ~tp:~tp:~tp", [X, Y, Z]),
|
||||
fd_httpd_utils:http_err(Sock, 500)
|
||||
end.
|
||||
|
||||
-record(rs,
|
||||
{ident = username = undefined :: undefined | string(),
|
||||
peers = undefined :: undefined | [
|
||||
-type webrtc_state() :: {username
|
||||
|
||||
ws_webrtc_loop(
|
||||
|
||||
%% ------------------------------
|
||||
%% echo
|
||||
%% ------------------------------
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user