| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- // http://www.scala-lang.org/node/54
- package examples.actors
- import scala.actors.Actor
- import scala.actors.Actor._
- abstract class PingMessage
- case object Start extends PingMessage
- case object SendPing extends PingMessage
- case object Pong extends PingMessage
- abstract class PongMessage
- case object Ping extends PongMessage
- case object Stop extends PongMessage
- object pingpong extends Application {
- val pong = new Pong
- val ping = new Ping(100000, pong)
- ping.start
- pong.start
- ping ! Start
- }
- class Ping(count: Int, pong: Actor) extends Actor {
- def act() {
- println("Ping: Initializing with count "+count+": "+pong)
- var pingsLeft = count
- loop {
- react {
- case Start =>
- println("Ping: starting.")
- pong ! Ping
- pingsLeft = pingsLeft - 1
- case SendPing =>
- pong ! Ping
- pingsLeft = pingsLeft - 1
- case Pong =>
- if (pingsLeft % 1000 == 0)
- println("Ping: pong from: "+sender)
- if (pingsLeft > 0)
- self ! SendPing
- else {
- println("Ping: Stop.")
- pong ! Stop
- exit('stop)
- }
- }
- }
- }
- }
- class Pong extends Actor {
- def act() {
- var pongCount = 0
- loop {
- react {
- case Ping =>
- if (pongCount % 1000 == 0)
- println("Pong: ping "+pongCount+" from "+sender)
- sender ! Pong
- pongCount = pongCount + 1
- case Stop =>
- println("Pong: Stop.")
- exit('stop)
- }
- }
- }
- }
|