51 lines
1.2 KiB
JavaScript
51 lines
1.2 KiB
JavaScript
var EventEmitter = require('events').EventEmitter;
|
|
var util = require('util');
|
|
|
|
module.exports = WebSocketApiClient;
|
|
|
|
util.inherits(WebSocketApiClient, EventEmitter);
|
|
function WebSocketApiClient(ws) {
|
|
EventEmitter.call(this);
|
|
this.ws = ws;
|
|
this.initialize();
|
|
}
|
|
|
|
WebSocketApiClient.prototype.sendMessage = function(name, args) {
|
|
try {
|
|
this.ws.send(JSON.stringify({
|
|
name: name,
|
|
args: args,
|
|
}));
|
|
} catch (err) {
|
|
// nothing to do
|
|
// client might have disconnected by now
|
|
}
|
|
};
|
|
|
|
WebSocketApiClient.prototype.close = function() {
|
|
this.ws.close();
|
|
};
|
|
|
|
WebSocketApiClient.prototype.initialize = function() {
|
|
var self = this;
|
|
self.ws.on('message', function(data, flags) {
|
|
if (flags.binary) {
|
|
console.warn("ignoring binary web socket message");
|
|
return;
|
|
}
|
|
var msg;
|
|
try {
|
|
msg = JSON.parse(data);
|
|
} catch (err) {
|
|
console.warn("received invalid JSON from web socket:", err.message);
|
|
return;
|
|
}
|
|
self.emit('message', msg.name, msg.args);
|
|
});
|
|
self.ws.on('error', function(err) {
|
|
console.error("web socket error:", err.stack);
|
|
});
|
|
self.ws.on('close', function() {
|
|
self.emit('close');
|
|
});
|
|
};
|