From be2192ef029a48acd00681e0c67d699a06895120 Mon Sep 17 00:00:00 2001 From: Vincent Heuschling Date: Sat, 12 Sep 2015 10:38:08 +0200 Subject: [PATCH 1/4] Simple AKKA example with actor killed and system shutdown --- main.scala | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/main.scala b/main.scala index c86e508..a1e84e8 100644 --- a/main.scala +++ b/main.scala @@ -2,9 +2,13 @@ import akka.actor.Actor import akka.actor.ActorSystem import akka.actor.Props +case object StopMsg; + + class HelloActor extends Actor { def receive = { case "hello" => println(" hello back at you") + case StopMsg => context.stop(self) case _ => println(" huh?") } } @@ -16,4 +20,7 @@ object Main extends App { helloActor ! "hello" helloActor ! "bonjour" helloActor ! "gutentag" + helloActor ! StopMsg + + system.shutdown() } From d984e6285d16cf7e348b8830c1a67775b568c7fa Mon Sep 17 00:00:00 2001 From: Vincent Heuschling Date: Sat, 12 Sep 2015 10:56:19 +0200 Subject: [PATCH 2/4] Adding case class for Messages --- main.scala | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/main.scala b/main.scala index a1e84e8..18af300 100644 --- a/main.scala +++ b/main.scala @@ -3,11 +3,11 @@ import akka.actor.ActorSystem import akka.actor.Props case object StopMsg; - +case class Msg(text : String) class HelloActor extends Actor { def receive = { - case "hello" => println(" hello back at you") + case Msg(t) => println(t) case StopMsg => context.stop(self) case _ => println(" huh?") } @@ -17,9 +17,10 @@ object Main extends App { val system = ActorSystem("HelloSystem") // default Actor constructor val helloActor = system.actorOf(Props[HelloActor], name = "helloactor") - helloActor ! "hello" - helloActor ! "bonjour" - helloActor ! "gutentag" + helloActor ! Msg("hello") + helloActor ! Msg("bonjour") + helloActor ! Msg("gutentag") + helloActor ! StopMsg system.shutdown() From af40eb85cbf7c124beeeae150ebd3edc65d5cf60 Mon Sep 17 00:00:00 2001 From: Vincent Heuschling Date: Sat, 12 Sep 2015 11:03:28 +0200 Subject: [PATCH 3/4] Using case class for Messages --- main.scala | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/main.scala b/main.scala index 18af300..2448579 100644 --- a/main.scala +++ b/main.scala @@ -7,7 +7,10 @@ case class Msg(text : String) class HelloActor extends Actor { def receive = { - case Msg(t) => println(t) + case Msg(t) => { + if (t == "hello") println(s" $t back to you") + else println(s" does '$t' mean hello ?") + } case StopMsg => context.stop(self) case _ => println(" huh?") } @@ -20,7 +23,7 @@ object Main extends App { helloActor ! Msg("hello") helloActor ! Msg("bonjour") helloActor ! Msg("gutentag") - + helloActor ! StopMsg system.shutdown() From 839085d16c9af1c122882857c2e13432e73dafff Mon Sep 17 00:00:00 2001 From: Vincent Heuschling Date: Sat, 12 Sep 2015 15:30:25 +0200 Subject: [PATCH 4/4] Using Future --- main.scala | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/main.scala b/main.scala index 2448579..55fca81 100644 --- a/main.scala +++ b/main.scala @@ -1,28 +1,40 @@ import akka.actor.Actor import akka.actor.ActorSystem import akka.actor.Props +import scala.concurrent.Await +import scala.concurrent.Future +import akka.pattern.ask +import akka.util.Timeout +import scala.concurrent.duration._ case object StopMsg; case class Msg(text : String) class HelloActor extends Actor { def receive = { - case Msg(t) => { - if (t == "hello") println(s" $t back to you") - else println(s" does '$t' mean hello ?") + case Msg(t) => { + if (t == "hello") sender ! s" $t back to you" + else sender ! s" does '$t' mean hello ?" } case StopMsg => context.stop(self) - case _ => println(" huh?") + case _ => sender ! " huh?" } } object Main extends App { val system = ActorSystem("HelloSystem") - // default Actor constructor val helloActor = system.actorOf(Props[HelloActor], name = "helloactor") - helloActor ! Msg("hello") - helloActor ! Msg("bonjour") - helloActor ! Msg("gutentag") + + implicit val timeout = Timeout(5 seconds) + + val future = helloActor ? Msg("hello") + val result = Await.result(future, timeout.duration).asInstanceOf[String] + println(result) + + //another way + val future2: Future[String] = ask(helloActor, Msg("bonjour")).mapTo[String] + val result2 = Await.result(future2, 1 second) + println(result2) helloActor ! StopMsg