Cat/classes/CatEmitter.js

30 lines
942 B
JavaScript

function CatEmitter() { }
CatEmitter.prototype._listeners = {};
CatEmitter.prototype.on = function(name, cb) {
if (!this._listeners[name]) this._listeners[name] = [];
for (let i = 0; i < this._listeners[name].length; i++) {
if (this._listeners[name][i] === cb) return false; // already exists
}
this._listeners[name].push(cb);
return true;
}
CatEmitter.prototype.removeListener = function(name, cb) {
if (!this._listeners[name]) return;
for (let i = 0; i < this._listeners[name].length; i++) {
if (this._listeners[name][i] === cb) {
this._listeners[name].splice(i, 1);
return true;
}
}
return false;
}
CatEmitter.prototype.emit = function(name, data) {
if (!this._listeners[name]) return;
for (let i = 0; i < this._listeners[name].length; i++) {
if (this._listeners[name][i](data) === false) return false; // exit early if false is returned
}
return true;
}
module.exports = CatEmitter;