我已经实现了可以添加到Actors的Listenable/Listener特性.我想知道是否有可能将这种特性附加到一个actor而不必显式调用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())
}
}
Run Code Online (Sandbox Code Playgroud)
为什么不Actor直接扩展,或者如果你想让非Actors也可以监听,那么创建一个可以使用Listenable扩展Actor的ListenableActor?
然后receive你就像在上面做的那样在Actor中重写(除了你super.receive也想要调用,不是吗? - 你只想修改传入的函数).
| 归档时间: |
|
| 查看次数: |
1485 次 |
| 最近记录: |