Commit f70ff242 authored by Juliusz Chroboczek's avatar Juliusz Chroboczek

Detect sends on closed websocket explicitly.

It turns out that send on a closed websocket doesn't throw, so handle
this case explicitly.  Thanks to Giuseppe Castagna for noticing.
parent 19162413
...@@ -67,10 +67,13 @@ Connection.prototype.close = function(sendit) { ...@@ -67,10 +67,13 @@ Connection.prototype.close = function(sendit) {
this.pc.close(); this.pc.close();
if(sendit) { if(sendit) {
send({ try {
type: 'close', send({
id: this.id, type: 'close',
}); id: this.id,
});
} catch(e) {
}
} }
}; };
...@@ -526,7 +529,6 @@ function serverConnect() { ...@@ -526,7 +529,6 @@ function serverConnect() {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
socket.onerror = function(e) { socket.onerror = function(e) {
console.error(e);
reject(e.error ? e.error : e); reject(e.error ? e.error : e);
}; };
socket.onopen = function(e) { socket.onopen = function(e) {
...@@ -534,14 +536,21 @@ function serverConnect() { ...@@ -534,14 +536,21 @@ function serverConnect() {
resetChat(); resetChat();
setConnected(true); setConnected(true);
let up = getUserPass(); let up = getUserPass();
send({ try {
type: 'handshake', send({
id: myid, type: 'handshake',
group: group, id: myid,
username: up.username, group: group,
password: up.password, username: up.username,
}); password: up.password,
sendRequest(document.getElementById('requestselect').value); })
sendRequest(document.getElementById('requestselect').value);
} catch(e) {
console.error(e);
displayError(e);
reject(e);
return;
}
resolve(); resolve();
}; };
socket.onclose = function(e) { socket.onclose = function(e) {
...@@ -730,6 +739,10 @@ async function addIceCandidates(conn) { ...@@ -730,6 +739,10 @@ async function addIceCandidates(conn) {
function send(m) { function send(m) {
if(!m) if(!m)
throw(new Error('Sending null message')); throw(new Error('Sending null message'));
if(socket.readyState !== socket.OPEN) {
// send on a closed connection doesn't throw
throw(new Error('Connection is not open'));
}
return socket.send(JSON.stringify(m)); return socket.send(JSON.stringify(m));
} }
...@@ -993,14 +1006,19 @@ function handleInput() { ...@@ -993,14 +1006,19 @@ function handleInput() {
return; return;
} }
addToChatbox(myid, username, message, me); try {
send({ let a = send({
type: 'chat', type: 'chat',
id: myid, id: myid,
username: username, username: username,
value: message, value: message,
me: me, me: me,
}); });
addToChatbox(myid, username, message, me);
} catch(e) {
console.error(e);
displayError(e);
}
} }
document.getElementById('inputform').onsubmit = function(e) { document.getElementById('inputform').onsubmit = function(e) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment