summaryrefslogtreecommitdiff
path: root/test/files/jvm/reactor.scala
diff options
context:
space:
mode:
authorPhilipp Haller <hallerp@gmail.com>2009-07-21 08:31:11 +0000
committerPhilipp Haller <hallerp@gmail.com>2009-07-21 08:31:11 +0000
commit3e95510910670e9456af43ca95fa5b3f83bc5b4d (patch)
tree636590fd83a9c990c2e746738bb95bb3e2d2d400 /test/files/jvm/reactor.scala
parent2b51d5c4772d480285359b9d2daf8b1ccef3eae4 (diff)
downloadscala-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.scala61
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()
+ }
+ }
+ }
+}