v2 / examples / veb / websocket / assets / client.js
44 lines · 43 sloc · 1.53 KB · 01fd719116f84ae22ee570188df6a26464b8268f
Raw
1const messageList = document.getElementById('message-list');
2const messageInput = document.getElementById('message-input');
3const messageStatus = document.getElementById('message-status');
4const protocol = location.protocol === 'https:' ? 'wss' : 'ws';
5//
6let status = '---';
7function set_status(s) { status = s; }
8function show_status() {
9 messageStatus.innerHTML = `${status}, ${socket.readyState}`;
10 requestAnimationFrame(show_status);
11}
12requestAnimationFrame(show_status);
13//
14var socket = start_reconnecting_socket(1000, `${protocol}://${location.host}/ws`);
15function start_reconnecting_socket(timeout, target) {
16 var nsocket = new WebSocket(target);
17 nsocket.addEventListener('open', (event) => { console.log('Connected to WS server'); set_status('connected'); });
18 nsocket.addEventListener('message', (event) => {
19 messageList.innerHTML += `<li>received: <b>${event.data}</b></li>`;
20 set_status('received message');
21 });
22 nsocket.addEventListener('close', (event) => {
23 console.log('on close');
24 set_status('connection closed');
25 setTimeout(()=>{
26 console.log('Try reconnecting ...')
27 socket = start_reconnecting_socket(timeout, target);
28 }, timeout);
29 });
30 nsocket.addEventListener('error', (event) => { console.log('on error'); set_status('error'); });
31 return nsocket;
32}
33
34//
35function send(message) {
36 socket.send(message);
37 set_status('sending message');
38}
39messageInput.addEventListener('keyup', ({key}) => {
40 if (key === 'Enter') {
41 send(messageInput.value);
42 messageInput.value = '';
43 }
44});
45