| // 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; |