UNPKG

frcp

Version:

An FRCP library and client.

120 lines (98 loc) 2.94 kB
// // Implements a FRCP library and client // var _ = require('underscore'); var resource = require('./resource'); DEFAULTS = { }; var connection = null; var addressPreFix = null; var eventEmitter = new (require('events').EventEmitter)(); // Initialise the FRCP context // // @param opts host // @param opts port // @param opts domain // @param opts sender_id // @param opts app_name // // @returns true if successful, false otherwise (need a better solution to signal errors) // module.exports.init = function(opts, cfgFunc) { var l = module.exports.logger; if (connection) { l.warn('Already initialised.'); return false; } if (! opts) { opts = {}; }; parseArgv(opts); if (cfgFunc && _.isFunction(cfgFunc)) { cfgFunc(); } var uri = opts.uri.replace(/\/+$/, ''); // replace trailing '/' addressPreFix = uri + '/'; l.debug("Connecting to '" + opts.uri + "'."); var proto = uri.split(':')[0]; switch (proto) { case 'amqp': connection = require('./connection')({uri: uri}); break; case 'mock': connection = require('./mock_connection'); break; default: throw new Error("Unknown connection protocol '" + proto + "'."); } return true; }; function parseArgv(opts) { var argv = process.argv; for (var i = 0; i < argv.length; i++) { var p = argv[i]; var consume = 0; if (p.indexOf("--frcp-uri") == 0) { opts.uri = argv[i + 1]; consume = 2; } else if (p.indexOf("--frcp-help") == 0) { console.log("OML options:\n"); console.log("\t--frcp-uri URI URI of server to send measurements to [file:-]"); console.log("\t--frcp-help Show this message"); process.exit(0); } if (consume > 0) { argv.splice(i, consume); i--; } } } var resource_f = module.exports.resource = function(name, subFunc) { if (!connection) { module.exports.logger.warn('Need to first call init().'); throw new Error('Need to first call init().'); } return resource("frcp." + name, subFunc, addressPreFix, connection); }; var proxy = require('./proxy'); module.exports.proxy = function(name, instance, context) { if (!connection) { module.exports.logger.warn('Need to first call init().'); throw new Error('Need to first call init().'); } var r = resource_f(name); return proxy(r, instance, context, eventEmitter); }; module.exports.on = function(name, callback) { eventEmitter.on(name, callback); }; module.exports.logger = function() { var my = {}; my.debug = function(msg) { console.log('DEBUG(frcp): ' + msg); }; my.info = function(msg) { console.log(' INFO(frcp): ' + msg); }; my.warn = function(msg) { console.log(' WARN(frcp): ' + msg); }; my.error = function(msg) { console.log('ERROR(frcp): ' + msg); }; my.fatal = function(msg) { console.log('FATAL(frcp): ' + msg); process.exit(1); }; return my; }();