diff options
Diffstat (limited to 'test/files/jvm/outputchannelactor.scala')
-rw-r--r-- | test/files/jvm/outputchannelactor.scala | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/test/files/jvm/outputchannelactor.scala b/test/files/jvm/outputchannelactor.scala new file mode 100644 index 0000000000..6a982b7a94 --- /dev/null +++ b/test/files/jvm/outputchannelactor.scala @@ -0,0 +1,63 @@ + +import scala.actors.OutputChannelActor +import scala.actors.Actor._ + +case class Ping(from: OutputChannelActor) +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: OutputChannelActor) extends OutputChannelActor { + ignoreSender = true + 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 OutputChannelActor { + ignoreSender = true + 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() + } + } + } +} |