46 lines
1021 B
JavaScript
46 lines
1021 B
JavaScript
'use strict';
|
|
|
|
|
|
var bitcore = require('bitcore');
|
|
var $ = bitcore.util.preconditions;
|
|
var _ = bitcore.deps._;
|
|
var EventEmitter = require('events').EventEmitter;
|
|
var util = require('util');
|
|
|
|
function Funnel() {
|
|
this.handlers = {};
|
|
}
|
|
util.inherits(Funnel, EventEmitter);
|
|
|
|
Funnel.prototype.process = function(e) {
|
|
var queue = [];
|
|
var done = [];
|
|
queue.push(e);
|
|
while (queue.length !== 0) {
|
|
var event = queue.shift();
|
|
var handlers = this.handlers[event.constructor.name] || [];
|
|
handlers.forEach(function(handler) {
|
|
var responses = handler(event);
|
|
if (responses && responses.length > 0) {
|
|
queue = queue.concat(responses);
|
|
}
|
|
});
|
|
done.push(event);
|
|
}
|
|
done.forEach(function(event) {
|
|
//that.emit(event.name, event);
|
|
});
|
|
|
|
};
|
|
|
|
|
|
Funnel.prototype.register = function(clazz, handler) {
|
|
$.checkArgument(_.isFunction(handler));
|
|
var name = clazz.name;
|
|
this.handlers[name] = this.handlers[name] || [];
|
|
this.handlers[name].push(handler);
|
|
};
|
|
|
|
|
|
module.exports = Funnel;
|