All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.ru.casperix.signals.concrete.SingleSignal.kt Maven / Gradle / Ivy

package ru.casperix.signals.concrete

import ru.casperix.signals.api.AbstractSignal

/**
 * 	Разовый сигнал ожидания события
 * 	Оповещает всех подписчиков при установке
 * 	Аналогичен [Signal] но срабатывает только единожды
 *
 * 	val signal = Signal
 * 	signal.then { println(it) }
 * 	signal.set("Hello-")
 * 	signal.set("World")
 */
class SingleSignal : SinglePromise, AbstractSignal<(Event) -> Unit, Slot>(SlotCollection()) {
	override var completed = false; private set
	private var value: Event? = null

	override fun then(listener: (Event) -> Unit): Slot {
		if (completed) {
			listener(value!!)
		}
		return super.then(listener)
	}

	override fun set(value: Event) {
		if (!completed) {
			completed = true
			this.value = value

			forEach { listener ->
				listener(value)
			}
		}
	}

	fun dropResult() {
		completed = false
		value = null
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy