From 7d72618b375a21387e18fc42b07a834cee3f2616 Mon Sep 17 00:00:00 2001 From: Philipp Haller Date: Wed, 4 Oct 2006 15:25:44 +0000 Subject: Added ping pong example. --- docs/examples/actors/PingPong.scala | 83 ++++++++++++++++++++++++++++++++ docs/examples/actors/RemoteCounter.scala | 10 +--- 2 files changed, 85 insertions(+), 8 deletions(-) create mode 100644 docs/examples/actors/PingPong.scala (limited to 'docs/examples/actors') diff --git a/docs/examples/actors/PingPong.scala b/docs/examples/actors/PingPong.scala new file mode 100644 index 0000000000..5f28aef162 --- /dev/null +++ b/docs/examples/actors/PingPong.scala @@ -0,0 +1,83 @@ +package examples.actors + +import scala.actors.Reactor +import scala.actors.Actor._ + +abstract class PingMessage +case class MsgStart() extends PingMessage +case class MsgPingInit(count: int, pong: Pong) extends PingMessage +case class MsgSendPing extends PingMessage +case class MsgPong(sender: Pong) extends PingMessage + +abstract class PongMessage +case class MsgPing(sender: Ping) extends PongMessage +case class MsgStop() extends PongMessage + +object PingPong { + def main(args : Array[String]): Unit = { + val ping = new Ping + ping.start + val pong = new Pong + pong.start + ping ! MsgPingInit(100000, pong) + ping ! MsgStart + } +} + + +class Ping extends Reactor { + def act(): unit = { + loop(0, null) + } + def loop(pingsLeft: int, pong: Pong): unit = { + react { + case MsgPingInit(count, pong) => { + System.out.println("Ping: Initializing with count:"+count+":"+pong) + loop(count, pong) + } + case MsgStart() => { + System.out.println("Ping: starting.") + pong ! MsgPing(this) + loop(pingsLeft-1, pong) + } + case MsgSendPing() => { + pong ! MsgPing(this) + loop(pingsLeft-1, pong) + } + case MsgPong(pidS) => { + if (pingsLeft % 100 == 0) { + System.out.println("Ping: pong from: "+pidS) + } + if (pingsLeft > 0) + this ! MsgSendPing() + else { + System.out.println("Ping: Stop.") + pong ! MsgStop() + } + loop(pingsLeft, pong) + } + } + } +} + +class Pong extends Reactor { + def act(): unit = { + loop(0) + } + + def loop(pongCount: int): unit = { + react { + case MsgPing(pidPing) => { + if (pongCount % 100 == 0) { + System.out.println("Pong: ping:"+pongCount+" from: "+pidPing) + } + pidPing ! MsgPong(this) + loop(pongCount+1) + } + case MsgStop() => { + System.out.println("Pong: Stop.") + System.exit(0) + } + } + } +} diff --git a/docs/examples/actors/RemoteCounter.scala b/docs/examples/actors/RemoteCounter.scala index b52259b6c2..2c6904f6ca 100644 --- a/docs/examples/actors/RemoteCounter.scala +++ b/docs/examples/actors/RemoteCounter.scala @@ -2,7 +2,7 @@ package examples.actors import scala.actors.Actor._ import scala.actors.RemoteActor._ -import scala.actors.{Actor,TcpNode} +import scala.actors.{Actor,Node} case object Incr case object Value @@ -25,15 +25,9 @@ object RemoteCounter extends Application { } actor { - val c = select(TcpNode("127.0.0.1", 9010), 'counter) - + val c = select(Node("127.0.0.1", 9010), 'counter) c ! Incr c ! Incr - - try { Thread.sleep(1000) } catch { - case ie: InterruptedException => - } - c ! Value receive { case Result(v) => { -- cgit v1.2.3