1 /* Title: Pure/System/event_bus.scala
5 Generic event bus with multiple receiving actors.
10 import scala.actors.Actor, Actor._
11 import scala.collection.mutable.ListBuffer
14 class Event_Bus[Event]
18 private val receivers = new ListBuffer[Actor]
20 def += (r: Actor) { synchronized { receivers += r } }
21 def + (r: Actor): Event_Bus[Event] = { this += r; this }
23 def += (f: Event => Unit) {
24 this += actor { loop { react { case x => f(x.asInstanceOf[Event]) } } }
27 def + (f: Event => Unit): Event_Bus[Event] = { this += f; this }
29 def -= (r: Actor) { synchronized { receivers -= r } }
30 def - (r: Actor) = { this -= r; this }
33 /* event invocation */
35 def event(x: Event) { synchronized { receivers.foreach(_ ! x) } }