SecretX
02/26/2021, 6:55 AMopen class Listener<T>(element: T) {
var value: T = element
protected set(value) {
field = value
notifyObservers(field)
}
private val observers: ConcurrentHashMap<UUID, Observer<T>> = ConcurrentHashMap()
private fun notifyObservers(newValue: T) {
observers.forEach { it.value.onChange(newValue) }
}
fun addListener(observer: Observer<T>): Subscription {
var uuid = UUID.randomUUID()
while(observers.contains(uuid)) {
Thread.sleep(1)
uuid = UUID.randomUUID()
}
val subscription = Subscription(uuid, this)
observers[uuid] = observer
return subscription
}
fun unsubscribeListener(uuid: UUID) = observers.remove(uuid)
fun unsubscribeAll(): Int {
val num = observers.size
observers.clear()
return num
}
}
ephemient
02/26/2021, 7:29 AMephemient
02/26/2021, 7:30 AMephemient
02/26/2021, 7:30 AM