Added Listeners to akka-patterns
This commit is contained in:
parent
d7e327d2b5
commit
4ffa75937b
2 changed files with 56 additions and 0 deletions
|
|
@ -85,3 +85,21 @@ class SmallestMailboxFirstIterator(items : List[Actor]) extends InfiniteIterator
|
|||
items.reduceLeft((actor1, actor2) => actorWithSmallestMailbox(actor1,actor2))
|
||||
}
|
||||
}
|
||||
|
||||
sealed trait ListenerMessage
|
||||
case class Listen(listener : Actor) extends ListenerMessage
|
||||
case class Deafen(listener : Actor) extends ListenerMessage
|
||||
case class WithListeners(f : Set[Actor] => Unit) extends ListenerMessage
|
||||
|
||||
trait Listeners { self : Actor =>
|
||||
import se.scalablesolutions.akka.actor.Agent
|
||||
private lazy val listeners = Agent(Set[Actor]())
|
||||
|
||||
protected def listenerManagement : PartialFunction[Any,Unit] = {
|
||||
case Listen(l) => listeners( _ + l)
|
||||
case Deafen(l) => listeners( _ - l )
|
||||
case WithListeners(f) => listeners foreach f
|
||||
}
|
||||
|
||||
protected def gossip(msg : Any) = listeners foreach ( _ foreach ( _ ! msg ) )
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue