blob: 6ab43c5528aa9fec9b2fc695f506d166cd7dbd0e (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
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")
}
}
}
}
|