const val EVENT_MODEL_UPDATE_LOGGED_IN : String = "modelUpdate.loggedIn" const val EVENT_MODEL_UPDATE_LOGGED_OUT : String = "modelUpdate.loggedOut" const val EVENT_MODEL_UPDATE_ROLES : String = "modelUpdate.roles" const val EVENT_MODEL_ERROR_LOGIN : String = "modelError.login" const val EVENT_VM_CLOSE_LOGIN : String = "vm.closeLogin" const val EVENT_SYSTEM_ERROR : String = "systemError" object Notifications { // make Injectable? val subscribers = mutableMapOf>() fun subscribe(event : String, subscriber : Any, cb : (String, Any?) -> Unit) { if( !subscribers.containsKey(event) ) { val slist = mutableListOf() subscribers.put( event, slist ) } val subscriberList = subscribers.get(event) subscriberList?.add(SubscriberObject(subscriber, cb)) } fun unsubscribe(event : String, subscriber : Any ) { val subscriberList = subscribers.get(event) subscriberList?.remove( subscriber as SubscriberObject ) } fun publish(event : String, data : Any? = null) { Platform.runLater( { val subscriberList = subscribers.get(event) subscriberList?.forEach( { it -> it.cb(event, data) }) }) } class SubscriberObject( val subscriber : Any, val cb : (String, Any?) -> Unit ) { override fun equals(other: Any?): Boolean { return subscriber.equals(other) } override fun hashCode(): Int { return subscriber.hashCode() } } }