52 lines
1.6 KiB
JavaScript
52 lines
1.6 KiB
JavaScript
|
// Generated by CoffeeScript 1.8.0
|
||
|
var MessageHandler, channelManager, serviceManager, utils,
|
||
|
__slice = [].slice;
|
||
|
|
||
|
utils = require('./utils');
|
||
|
|
||
|
channelManager = require('./channelManager');
|
||
|
|
||
|
serviceManager = require('./serviceManager');
|
||
|
|
||
|
utils.registerClass(MessageHandler = (function() {
|
||
|
function MessageHandler() {}
|
||
|
|
||
|
MessageHandler.prototype.handleMessage = function(channel, message) {
|
||
|
return this._serviceMethodInvoker(channel, message["interface"], message.method, message.args);
|
||
|
};
|
||
|
|
||
|
MessageHandler.prototype._serviceMethodInvoker = function(channel, intfName, method, args) {
|
||
|
var e, methodSignature, service;
|
||
|
methodSignature = "" + intfName + "." + method + "()";
|
||
|
service = serviceManager.get(intfName);
|
||
|
if (!service) {
|
||
|
return this._redirectToConnections(channel, intfName, method, args);
|
||
|
}
|
||
|
args = args.slice();
|
||
|
args.unshift(channel);
|
||
|
try {
|
||
|
return service[method].apply(service, args);
|
||
|
} catch (_error) {
|
||
|
e = _error;
|
||
|
utils.log("error running service method " + methodSignature + ": " + e);
|
||
|
return utils.log("stack:\n" + e.stack);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
MessageHandler.prototype._redirectToConnections = function(channel, intfName, method, args) {
|
||
|
var connection, _i, _len, _ref, _results;
|
||
|
_ref = channel.connections;
|
||
|
_results = [];
|
||
|
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
||
|
connection = _ref[_i];
|
||
|
_results.push(connection.sendMessage.apply(connection, [intfName, method].concat(__slice.call(args))));
|
||
|
}
|
||
|
return _results;
|
||
|
};
|
||
|
|
||
|
return MessageHandler;
|
||
|
|
||
|
})());
|
||
|
|
||
|
module.exports = new MessageHandler;
|