corrade-nucleus-nucleons – Blame information for rev 20

Subversion Repositories:
Rev:
Rev Author Line No. Line
20 office 1 // http://www.scala-lang.org/node/54
2  
3 package examples.actors
4  
5 import scala.actors.Actor
6 import scala.actors.Actor._
7  
8 abstract class PingMessage
9 case object Start extends PingMessage
10 case object SendPing extends PingMessage
11 case object Pong extends PingMessage
12  
13 abstract class PongMessage
14 case object Ping extends PongMessage
15 case object Stop extends PongMessage
16  
17 object pingpong extends Application {
18 val pong = new Pong
19 val ping = new Ping(100000, pong)
20 ping.start
21 pong.start
22 ping ! Start
23 }
24  
25 class Ping(count: Int, pong: Actor) extends Actor {
26 def act() {
27 println("Ping: Initializing with count "+count+": "+pong)
28 var pingsLeft = count
29 loop {
30 react {
31 case Start =>
32 println("Ping: starting.")
33 pong ! Ping
34 pingsLeft = pingsLeft - 1
35 case SendPing =>
36 pong ! Ping
37 pingsLeft = pingsLeft - 1
38 case Pong =>
39 if (pingsLeft % 1000 == 0)
40 println("Ping: pong from: "+sender)
41 if (pingsLeft > 0)
42 self ! SendPing
43 else {
44 println("Ping: Stop.")
45 pong ! Stop
46 exit('stop)
47 }
48 }
49 }
50 }
51 }
52  
53 class Pong extends Actor {
54 def act() {
55 var pongCount = 0
56 loop {
57 react {
58 case Ping =>
59 if (pongCount % 1000 == 0)
60 println("Pong: ping "+pongCount+" from "+sender)
61 sender ! Pong
62 pongCount = pongCount + 1
63 case Stop =>
64 println("Pong: Stop.")
65 exit('stop)
66 }
67 }
68 }
69 }