summaryrefslogtreecommitdiff
path: root/docs/examples/actors
diff options
context:
space:
mode:
authorPhilipp Haller <hallerp@gmail.com>2006-10-04 15:25:44 +0000
committerPhilipp Haller <hallerp@gmail.com>2006-10-04 15:25:44 +0000
commit7d72618b375a21387e18fc42b07a834cee3f2616 (patch)
tree3086decebe82420407b3be89c9d1e1cae9123e88 /docs/examples/actors
parent76faa29bb78029a79a327cbe5b6708b1c7b408de (diff)
downloadscala-7d72618b375a21387e18fc42b07a834cee3f2616.tar.gz
scala-7d72618b375a21387e18fc42b07a834cee3f2616.tar.bz2
scala-7d72618b375a21387e18fc42b07a834cee3f2616.zip
Added ping pong example.
Diffstat (limited to 'docs/examples/actors')
-rw-r--r--docs/examples/actors/PingPong.scala83
-rw-r--r--docs/examples/actors/RemoteCounter.scala10
2 files changed, 85 insertions, 8 deletions
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) => {