40 lines
894 B
JavaScript
40 lines
894 B
JavaScript
|
'use strict';
|
||
|
|
||
|
const EventEmitter = require('events');
|
||
|
|
||
|
// wrapper around the Node.js ws module
|
||
|
// for use in browsers
|
||
|
class WebSocketWrapper extends EventEmitter {
|
||
|
constructor(url) {
|
||
|
super();
|
||
|
this._ws = new WebSocket(url); // eslint-disable-line no-undef
|
||
|
this._ws.onopen = () => {
|
||
|
this.emit('open');
|
||
|
};
|
||
|
this._ws.onclose = () => {
|
||
|
this.emit('close');
|
||
|
};
|
||
|
this._ws.onmessage = (event) => {
|
||
|
this.emit('message', event.data);
|
||
|
};
|
||
|
this._ws.onerror = () => {
|
||
|
this.emit('error', new Error('WebSocket error'));
|
||
|
};
|
||
|
}
|
||
|
|
||
|
close() {
|
||
|
this._ws.close();
|
||
|
}
|
||
|
|
||
|
send(data, callback) {
|
||
|
try {
|
||
|
this._ws.send(data);
|
||
|
callback();
|
||
|
} catch (err) {
|
||
|
callback(err);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
module.exports = WebSocketWrapper;
|