アクターに追加できる Listenable/Listener トレイトを実装しました。listenerHandlerメソッドを明示的に呼び出さなくても、このスタイルの特性をアクターにアタッチできるかどうか疑問に思っています。
また、この機能が Akka ライブラリにあることを期待していました。何か不足していますか、それとも Akka がこれを含めない理由がありますか?
trait Listenable { this: Actor =>
private var listeners: List[Actor] = Nil
protected def listenerHandler: PartialFunction[Any, Unit] = {
case AddListener(who) => listeners = who :: listeners
}
protected def notifyListeners(event: Any) = {
listeners.foreach(_.send(event))
}
}
class SomeActor extends Actor with Listenable
{
def receive = listenerHandler orElse {
case Start => notifyListeners(Started())
case Stop => notifyListeners(Stopped())
}
}