summaryrefslogtreecommitdiff
path: root/docs/examples/actors/pingpong.scala
diff options
context:
space:
mode:
authorPhilipp Haller <hallerp@gmail.com>2007-02-02 15:17:51 +0000
committerPhilipp Haller <hallerp@gmail.com>2007-02-02 15:17:51 +0000
commit7cc5c06947e40236ee16a6a09d3de524183fda86 (patch)
tree8b22f79f79ffcb4b8485a3c6b21380efdc66d903 /docs/examples/actors/pingpong.scala
parent8c1bbafee4c68ccd158786deb4643d5a3074ce0d (diff)
downloadscala-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.scala75
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")
+ }
+ }
+ }
+}