Vue-Socket.io/src/Emitter.js
lastmirage ffbf48ee28 indent
2018-03-19 15:15:41 +09:00

49 lines
No EOL
1.3 KiB
JavaScript
Executable file

export default new class {
constructor() {
this.listeners = new Map();
}
addListener(label, callback, vm) {
if (typeof callback == 'function') {
this.listeners.has(label) || this.listeners.set(label, []);
this.listeners.get(label).push({ callback: callback, vm: vm });
return true
}
return false
}
removeListener(label, callback, vm) {
let listeners = this.listeners.get(label),
index;
if (listeners && listeners.length) {
index = listeners.reduce((i, listener, index) => {
return (typeof listener.callback == 'function' && listener.callback === callback && listener.vm == vm) ?
i = index :
i;
}, -1);
if (index > -1) {
listeners.splice(index, 1);
this.listeners.set(label, listeners);
return true;
}
}
return false;
}
emit(label, ...args) {
let listeners = this.listeners.get(label);
if (listeners && listeners.length) {
listeners.forEach((listener) => {
listener.callback.call(listener.vm, ...args)
});
return true;
}
return false;
}
}