diff options
author | Philipp Haller <hallerp@gmail.com> | 2007-02-02 15:17:51 +0000 |
---|---|---|
committer | Philipp Haller <hallerp@gmail.com> | 2007-02-02 15:17:51 +0000 |
commit | 7cc5c06947e40236ee16a6a09d3de524183fda86 (patch) | |
tree | 8b22f79f79ffcb4b8485a3c6b21380efdc66d903 /docs/examples/actors/pingpong.scala | |
parent | 8c1bbafee4c68ccd158786deb4643d5a3074ce0d (diff) | |
download | scala-7cc5c06947e40236ee16a6a09d3de524183fda86.tar.gz scala-7cc5c06947e40236ee16a6a09d3de524183fda86.tar.bz2 scala-7cc5c06947e40236ee16a6a09d3de524183fda86.zip |
Cleaned-up actor examples.
Diffstat (limited to 'docs/examples/actors/pingpong.scala')
-rw-r--r-- | docs/examples/actors/pingpong.scala | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/docs/examples/actors/pingpong.scala b/docs/examples/actors/pingpong.scala new file mode 100644 index 0000000000..6ab43c5528 --- /dev/null +++ b/docs/examples/actors/pingpong.scala @@ -0,0 +1,75 @@ +package examples.actors + +import scala.actors.Actor +import scala.actors.Actor._ + +abstract class PingMessage +case class MsgPingInit(count: int, pong: Actor) extends PingMessage +case object MsgStart extends PingMessage +case object MsgSendPing extends PingMessage +case object MsgPong extends PingMessage + +abstract class PongMessage +case object MsgPing extends PongMessage +case object MsgStop extends PongMessage + +object pingpong { + def main(args : Array[String]) { + val ping = new Ping + ping.start + val pong = new Pong + pong.start + ping ! MsgPingInit(100000, pong) + ping ! MsgStart + } +} + +class Ping extends Actor { + def act() { + var pingsLeft = 0 + var pong: Actor = null + loop { + react { + case MsgPingInit(count, png) => + Console.println("Ping: Initializing with count "+count+": "+png) + pingsLeft = count + pong = png + case MsgStart => + Console.println("Ping: starting.") + pong ! MsgPing + pingsLeft = pingsLeft - 1 + case MsgSendPing => + pong ! MsgPing + pingsLeft = pingsLeft - 1 + case MsgPong => + if (pingsLeft % 100 == 0) + Console.println("Ping: pong from: "+sender) + if (pingsLeft > 0) + self ! MsgSendPing + else { + Console.println("Ping: Stop.") + pong ! MsgStop + exit("stop") + } + } + } + } +} + +class Pong extends Actor { + def act() { + var pongCount = 0 + loop { + react { + case MsgPing => + if (pongCount % 100 == 0) + Console.println("Pong: ping "+pongCount+" from "+sender) + sender ! MsgPong + pongCount = pongCount + 1 + case MsgStop => + Console.println("Pong: Stop.") + exit("stop") + } + } + } +} |