File size: 1,273 Bytes
bc20498 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
'use strict';
const coincident = (require('./server.js'));
class DirectEmitter {
on(type, handler) {
this[type] = handler;
return this;
}
}
class WebSocketServer extends DirectEmitter {
constructor() {
super();
this.connection = null;
}
}
class WebSocketClient extends DirectEmitter {
constructor(ws) {
super();
this.ws = ws;
this.close = null;
this.message = null;
this.error = null;
}
once(_, handler) {
this.message = message => {
this.send(message);
handler(message);
};
}
send(message) {
this.ws.send(message);
}
}
/**
* @param {object} globals Globals to expose via coincident
* @returns
*/
module.exports = globals => {
const sockets = new Map;
const wss = new WebSocketServer;
coincident(wss, globals);
return {
/**
* @param {WebSocket} ws
* @param {string} message
*/
message(ws, message) {
sockets.get(ws).message(message);
},
/**
* @param {WebSocket} ws
*/
open(ws) {
const wsc = new WebSocketClient(ws);
sockets.set(ws, wsc);
wss.connection(wsc);
},
/**
* @param {WebSocket} ws
*/
close(ws) {
sockets.get(ws).close();
sockets.delete(ws);
},
};
};
|