Skip to content

Instantly share code, notes, and snippets.

@LunaSquee
Created October 3, 2016 13:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save LunaSquee/7bb7a552f5d028aaf3815d438d4b473d to your computer and use it in GitHub Desktop.
Save LunaSquee/7bb7a552f5d028aaf3815d438d4b473d to your computer and use it in GitHub Desktop.
Custom node.js event emitter class
class IcyEmitter {
constructor() {
this.listeners = {};
this.on = this.addEventListener;
}
emitAll(event) {
for(let a in this.listeners) {
let scopes = this.listeners[a];
for(let b in scopes) {
let listener = scopes[b];
if(listener.event == event)
listener.callback.apply(null, Array.prototype.slice.call(arguments, 1));
if(listener.once == true)
this.removeListeners(event, listener.scope);
}
}
}
removeAll(event) {
for(let a in this.listeners) {
let scopes = this.listeners[a];
for(let b in scopes) {
let listener = scopes[b];
if(listener.event == event)
this.removeListeners(listener.event, a);
}
}
}
emitScope(event, scope) {
if(!this.listeners[scope]) return;
for(let a in this.listeners[scope]) {
let listener = this.listeners[scope][a];
if(listener.event == event)
listener.callback.apply(null, Array.prototype.slice.call(arguments, 2));
if(listener.once == true)
this.removeListeners(event, scope);
}
}
removeListeners(event, scope) {
if(!this.listeners[scope]) return;
for(let a in this.listeners[scope]) {
let listener = this.listeners[scope][a];
if(listener.event == event)
this.listeners[scope].splice(this.listeners[scope].indexOf(listener), 1);
}
}
removeListener(event, scope, callback) {
if(!this.listeners[scope]) return;
for(let a in this.listeners[scope]) {
let listener = this.listeners[scope][a];
if(listener.event == event && listener.callback == callback)
this.listeners[scope].splice(this.listeners[scope].indexOf(listener), 1);
}
}
removeScope(scope) {
if(!this.listeners[scope]) return;
this.listeners[scope] = [];
delete this.listeners[scope];
}
addEventListener(event, scope, callback) {
if(!this.listeners[scope])
this.listeners[scope] = [];
this.listeners[scope].push({event: event, callback: callback, once: false});
}
once(event, scope, callback) {
if(!this.listeners[scope])
this.listeners[scope] = [];
this.listeners[scope].push({event: event, callback: callback, once: true});
}
}
module.exports = {
IcyEmitter: IcyEmitter
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment