@parlour/parlour-client
Version:
The parlour websocket client
60 lines (58 loc) • 1.16 kB
JavaScript
class EventModel {
constructor(data) {
Object.assign(this, data);
this._events = {};
}
_on(name, fn) {
const eventModel = this;
if(!(name in eventModel._events)) {
eventModel._events[name] = [];
}
eventModel._events[name].push(fn);
return () => {
eventModel.off(name, fn);
};
}
on() {
const args = arguments;
const typeOfArgs = typeof args[0];
switch(typeOfArgs) {
case 'object':
const eventHandlers = args[0];
const unbindFns = [];
for(let key in eventHandlers) {
unbindFns.push(this._on(key, eventHandlers[key]));
}
return () => {
for(let i = 0; i < unbindFns.length; i++) {
unbindFns[i]();
}
};
break;
case 'string':
return this._on(args[0], args[1]);
break;
default:
break;
}
}
off(name, fn) {
const fns = this._events[name];
if(Array.isArray(fns)) {
const index = fns.indexOf(fn);
if(index >= 0) {
fns.splice(index, 1);
}
}
}
trigger(name, args) {
const fns = this._events[name];
if(Array.isArray(fns)) {
for(let i = 0; i < fns.length; i++) {
let fn = fns[i];
fn.apply(this, args);
}
}
}
}
export default EventModel;