blob: 1d93021cfe9fa741973b0ebb56eff4799ec3f8d2 [file] [log] [blame]
// 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;