groovebasin/lib/web_socket_api_client.js

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');
});
};