import MessageListener from './MessageListener'; class MessageBus { protected listeners: Map>; constructor () { this.listeners = new Map>(); } public register (messageName: String, fn: Function, scope: Object, once?: Boolean): MessageListener { let listener = new MessageListener(messageName, fn, scope, once); this.addListener(listener); return listener; } public unregister (listener: MessageListener) { if (!this.listeners.has(listener.messageName)) { return; } this.listeners.get(listener.messageName).delete(listener); } public unregisterAllFor (messageName) { if (!this.listeners.has(messageName)) { return; } this.listeners.delete(messageName); } public addListener (listener: MessageListener) { let messageName = listener.messageName; if (!this.listeners.has(messageName)) { this.listeners.set(messageName, new Set()); } this.listeners.get(messageName).add(listener); } } export default MessageBus;