| // Generated by CoffeeScript 1.8.0 |
| var ServiceManager, Services, fs, getMethodProxy, getServiceInterface, path, utils, _, |
| __slice = [].slice; |
| |
| path = require('path'); |
| |
| fs = require('fs'); |
| |
| _ = require('underscore'); |
| |
| utils = require('./utils'); |
| |
| Services = {}; |
| |
| utils.registerClass(ServiceManager = (function() { |
| function ServiceManager() { |
| this.services = {}; |
| } |
| |
| ServiceManager.prototype.get = function(name) { |
| if (_.has(this.services, name)) { |
| return this.services[name]; |
| } |
| return null; |
| }; |
| |
| ServiceManager.prototype.registerLocalClass = function(name) { |
| var e, serviceClass; |
| serviceClass = null; |
| try { |
| serviceClass = require("./service/" + name); |
| } catch (_error) { |
| e = _error; |
| utils.log("local service class not found: " + name); |
| throw e; |
| } |
| return this.services[name] = new serviceClass; |
| }; |
| |
| ServiceManager.prototype.registerProxyClass = function(name) { |
| var intf, method, service, _i, _len, _ref; |
| intf = getServiceInterface(name); |
| if (!intf) { |
| utils.exit("proxy service class not found: " + name); |
| } |
| if (intf.name !== name) { |
| utils.exit("proxy interface '" + intf.name + "' loaded when '" + name + "' requested"); |
| } |
| service = {}; |
| _ref = intf.methods; |
| for (_i = 0, _len = _ref.length; _i < _len; _i++) { |
| method = _ref[_i]; |
| service[method.name] = getMethodProxy(name, method.name); |
| } |
| return this.services[name] = service; |
| }; |
| |
| return ServiceManager; |
| |
| })()); |
| |
| getMethodProxy = function(intfName, methodName) { |
| return function() { |
| var args, channel, channels, _i, _len, _results; |
| channels = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : []; |
| if (!_.isArray(channels)) { |
| channels = [channels]; |
| } |
| _results = []; |
| for (_i = 0, _len = channels.length; _i < _len; _i++) { |
| channel = channels[_i]; |
| _results.push(channel.sendMessage.apply(channel, [intfName, methodName].concat(__slice.call(args)))); |
| } |
| return _results; |
| }; |
| }; |
| |
| getServiceInterface = function(name) { |
| var contents, fileName, jsonName, serviceInterface; |
| jsonName = "" + name + ".json"; |
| fileName = path.join(utils.options.staticWebDir, 'interfaces', jsonName); |
| if (!utils.fileExistsSync(fileName)) { |
| return null; |
| } |
| contents = fs.readFileSync(fileName, 'utf8'); |
| serviceInterface = JSON.parse(contents); |
| return serviceInterface.interfaces[0]; |
| }; |
| |
| module.exports = new ServiceManager; |