lirc
Version:
An old IRC client for node
102 lines (87 loc) • 2.55 kB
JavaScript
// Generated by CoffeeScript 1.12.7
(function() {
var botnet, cluster, events, lirc, typeOf;
events = require('events');
cluster = require('cluster');
lirc = require('../lirc');
botnet = require('./botnet');
typeOf = lirc.utils.typeOf;
module.exports = botnet.emitter = new events.EventEmitter();
botnet.on = function() {
var args, i, len, ref, results, val;
if (typeof arguments[0] === 'string') {
arguments[0] = [arguments[0]];
}
ref = arguments[0];
results = [];
for (i = 0, len = ref.length; i < len; i++) {
val = ref[i];
args = Array.prototype.slice.call(arguments);
val = val.toLowerCase();
args[0] = val;
results.push(botnet.emitter.on.apply(lirc.botnet.emitter, args));
}
return results;
};
botnet.emit = function() {
var key, obj, ref, results, worker, workerId;
obj = botnet.emit.parseArgs(arguments);
if (cluster.isMaster) {
ref = botnet.bots;
results = [];
for (key in ref) {
worker = ref[key];
workerId = 0;
if (obj.workerId != null) {
workerId = obj.workerId.toString();
}
if (key !== workerId) {
results.push(worker.send(obj));
} else {
results.push(void 0);
}
}
return results;
} else {
return botnet.emit.master(obj);
}
};
botnet.emit.local = function() {
var args;
args = Array.prototype.slice.call(arguments);
if (typeOf(args[0]) === 'array' && args.length === 1) {
args = args[0];
}
args[0] = args[0] || '*';
args[0] = args[0].toLowerCase();
if (args[0] !== '*') {
arguments.callee('*', args);
}
return botnet.emitter.emit.apply(botnet.emitter, args);
};
botnet.emit.master = function() {
var obj;
if (!('send' in process)) {
return lirc.error('warn', "botnet.send.master(), can't use process.send()");
}
obj = botnet.emit.parseArgs(arguments);
return process.send(obj);
};
botnet.emit.worker = function() {};
botnet.emit.parseArgs = function(args) {
var ref, ref1;
args = Array.prototype.slice.call(args);
if (typeOf(args[0]) === 'object') {
if (!args[0].workerId) {
args[0].workerId = ((ref = cluster.worker) != null ? ref.id : void 0) || 0;
}
return args[0];
}
return {
cmd: 'emit.botnet',
args: args,
workerId: ((ref1 = cluster.worker) != null ? ref1.id : void 0) || 0
};
};
botnet.emitter._events = {};
}).call(this);