diff options
author | Philipp Haller <hallerp@gmail.com> | 2009-07-21 08:31:11 +0000 |
---|---|---|
committer | Philipp Haller <hallerp@gmail.com> | 2009-07-21 08:31:11 +0000 |
commit | 3e95510910670e9456af43ca95fa5b3f83bc5b4d (patch) | |
tree | 636590fd83a9c990c2e746738bb95bb3e2d2d400 /test/files/jvm/reactor.scala | |
parent | 2b51d5c4772d480285359b9d2daf8b1ccef3eae4 (diff) | |
download | scala-3e95510910670e9456af43ca95fa5b3f83bc5b4d.tar.gz scala-3e95510910670e9456af43ca95fa5b3f83bc5b4d.tar.bz2 scala-3e95510910670e9456af43ca95fa5b3f83bc5b4d.zip |
Renamed outputchannelactor test to reactor.
Diffstat (limited to 'test/files/jvm/reactor.scala')
-rw-r--r-- | test/files/jvm/reactor.scala | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/test/files/jvm/reactor.scala b/test/files/jvm/reactor.scala new file mode 100644 index 0000000000..8985f90569 --- /dev/null +++ b/test/files/jvm/reactor.scala @@ -0,0 +1,61 @@ + +import scala.actors.Reactor +import scala.actors.Actor._ + +case class Ping(from: Reactor) +case object Pong +case object Stop + +/** + * Ping pong example for OutputChannelActor. + * + * @author Philipp Haller + */ +object Test { + def main(args: Array[String]) { + val pong = new PongActor + val ping = new PingActor(100000, pong) + ping.start + pong.start + } +} + +class PingActor(count: Int, pong: Reactor) extends Reactor { + def act() { + var pingsLeft = count - 1 + pong ! Ping(this) + loop { + react { + case Pong => + if (pingsLeft % 10000 == 0) + println("Ping: pong") + if (pingsLeft > 0) { + pong ! Ping(this) + pingsLeft -= 1 + } else { + println("Ping: stop") + pong ! Stop + exit() + } + } + } + } +} + +class PongActor extends Reactor { + def act() { + var pongCount = 0 + loop { + react { + case Ping(from) => + if (pongCount % 10000 == 0) + println("Pong: ping "+pongCount) + from ! Pong + pongCount += 1 + case Stop => + println("Pong: stop") + exit() + } + } + } +} |