export class ChatEvent { private static _callbacks: any = {}; constructor() { } static on(eventName: string, callback) { if (!this._callbacks[eventName]) { this._callbacks[eventName] = []; } this._callbacks[eventName].push(callback); } static off(eventName: string, callback) { const callbacks = this._callbacks[eventName]; if (!callbacks) { return; } let index = -1; for (let i = 0; i < callbacks.length; i++) { if (callbacks[i] === callback) { index = i; break; } } if (index < 0) { return; } this._callbacks[eventName].splice(index, 1); } static trigger(eventName: string, event: any) { const callbacks = this._callbacks[eventName]; if (!callbacks || !callbacks.length) { return; } const args = Array.prototype.slice.call(arguments, 1); // tslint:disable-next-line: prefer-for-of for (let i = 0; i < callbacks.length; i++) { callbacks[i].apply(this, args); } } }