lm-sistemi-software-distrib.../src/main/kotlin/drills/drill02/exercise1/RemoteObservable.kt

35 lines
788 B
Kotlin

package drills.drill02.exercise1
import java.rmi.Remote
import java.rmi.RemoteException
import java.rmi.server.UnicastRemoteObject
interface RemoteObservable : Remote {
@Throws(RemoteException::class)
fun attach(o: RemoteObserver)
@Throws(RemoteException::class)
fun detach(o: RemoteObserver)
@Throws(RemoteException::class)
fun notify(obj: Any)
}
abstract class AbstractRemoteObservable : RemoteObservable, UnicastRemoteObject() {
private val observers = mutableListOf<RemoteObserver>()
override fun attach(o: RemoteObserver) {
observers.add(o)
}
override fun detach(o: RemoteObserver) {
observers.remove(o)
}
override fun notify(obj: Any) {
observers.forEach {
it.update(obj)
}
}
}