diff options
author | Vojin Jovanovic <vojin.jovanovic@epfl.ch> | 2012-05-18 17:53:05 +0200 |
---|---|---|
committer | Vojin Jovanovic <vojin.jovanovic@epfl.ch> | 2012-05-18 17:53:05 +0200 |
commit | e99fb0c93842d517b8a185458f405bace2bbb46b (patch) | |
tree | 070e9117c43fc09e3c850594b76f1957fb68c045 /test/files/jvm/actmig-react-receive.scala | |
parent | ef7708812fac32ca0c2a05330222a6b0806c9054 (diff) | |
download | scala-e99fb0c93842d517b8a185458f405bace2bbb46b.tar.gz scala-e99fb0c93842d517b8a185458f405bace2bbb46b.tar.bz2 scala-e99fb0c93842d517b8a185458f405bace2bbb46b.zip |
Adding the Actor Migration Kit.
Kit consists of:
1) The StashingActor which adopts an interface similar to Akka.
2) Props mockup for creating Akka like code
3) Pattern mockup
4) Test cases for every step in the migration.
5) MigrationSystem which will paired on the Akka side.
Review of the code : @phaller
Review of the build: @jsuereth
Diffstat (limited to 'test/files/jvm/actmig-react-receive.scala')
-rw-r--r-- | test/files/jvm/actmig-react-receive.scala | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/test/files/jvm/actmig-react-receive.scala b/test/files/jvm/actmig-react-receive.scala new file mode 100644 index 0000000000..fbc10a8d52 --- /dev/null +++ b/test/files/jvm/actmig-react-receive.scala @@ -0,0 +1,104 @@ +import scala.actors.MigrationSystem._ +import scala.actors.Actor._ +import scala.actors.{ Actor, StashingActor, ActorRef, Props, MigrationSystem, PoisonPill } +import java.util.concurrent.{ TimeUnit, CountDownLatch } +import scala.collection.mutable.ArrayBuffer + +object Test { + + def testComposition() = { + // Snippet showing composition of receives + // React Snippet - before + val myActor = actor { + // do before + println("do before") + receive { + case x: Int => + // do task + println("do task") + } + println("do in between") + receive { + case x: String => + // do string now + println("do string") + } + println("do after") + } + myActor.start() + myActor ! 1 + myActor ! "1" + Thread.sleep(200) + // React Snippet - migrated + val myAkkaActor = MigrationSystem.actorOf(Props(() => new StashingActor { + override def preStart() = { + println("do before") + } + + def receive = ({ + case x: Int => + // do task + println("do task") + }: Receive) andThen { v => + context.become { + case x: String => + //do string + println("do string") + context.stop(self) + } + println("do in between") + } + + override def postStop() = { + println("do after") + } + + }, "default-stashing-dispatcher")) + myAkkaActor ! 1 + myAkkaActor ! "1" + Thread.sleep(200) + } + + def main(args: Array[String]) = { + // React Snippet - before + val myActor = actor { + // do before + println("do before") + receive { + case x: Int => + // do task + println("do task") + } + println("do after") + } + myActor.start() + myActor ! 1 + + Thread.sleep(200) + + // React Snippet - migrated + val myAkkaActor = MigrationSystem.actorOf(Props(() => new StashingActor { + override def preStart() = { + println("do before") + } + + def receive = { + case x: Int => + // do task + println("do task") + context.stop(self) + } + + override def postStop() = { + println("do after") + } + + }, "default-stashing-dispatcher")) + myAkkaActor ! 1 + + Thread.sleep(200) + // Starting composition test + testComposition() + + } +} |