update
Former-commit-id: bdede6ed1b6f578f2ef046c338caf02d0b29d453 [formerly 7187de361b53e9c8ec121df379b762f2db736ea2] Former-commit-id: 447d58460fbbfd05ffe08428a1288e392637561d
This commit is contained in:
69
_embed/public/ace/demo/kitchen-sink/docs/scala.scala
Normal file
69
_embed/public/ace/demo/kitchen-sink/docs/scala.scala
Normal file
@@ -0,0 +1,69 @@
|
||||
// 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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user