2016-10-01 3 views
0

Ich bin neu bei akka und ich frage mich, wie man einen Kind Schauspieler erhalten Nachrichten erhalten.Ich kann keinen Kind Schauspieler bekommen Nachrichten zu erhalten

Ich habe einen übergeordneten Akteur, der ausgibt, dass er eine Nachricht empfangen hat, und sendet dann eine Nachricht an sein Kind, das dann ausgibt, dass es eine Nachricht empfangen hat.

Wenn ich das Programm ausführen, nur der übergeordnete Akteur druckt seine Nachricht. Gibt es etwas, das ich vermisse?

Die Mutter Schauspieler

class TestDirector(name: String) extends Actor { 
    import TestDirector._ 

    implicit val timeout = Timeout(5.seconds) 

    private var child: ActorRef = _ 

    override def preStart(): Unit = { 
    println(name + " pre-start") 
    child = context.actorOf(props("test-file"), name = "child-actor") 
    } 

    override def receive: Receive = { 
    case TestDirectory(dir) => 
     println("Test Director") 
     child ! TestWorker.TestFile 
    } 

} 

object TestDirector { 
    case class TestDirectory(dirName: String) 
    case class TestResponse(message: String) 

    def props(dirName: String) = Props(classOf[TestDirector], dirName) 

} 

Das Kind Schauspieler

class TestWorker(fileName: String) extends Actor { 
    import TestWorker._ 

    override def receive: Receive = { 
    case TestFile => println("Hello world") 
    } 

} 

object TestWorker { 
    case object TestFile 

    def props(fileName: String) = Props(classOf[TestWorker], fileName) 
} 

Antwort

0

In TestDirector.preStart Sie

child = context.actorOf(props("test-file"), name = "child-actor") 

Those "Requisiten", sagen sind Test-Director .props, die Sie ein paar Zeilen oben importiert haben, so dass Sie endlos neue TestDirectors erstellen. Ich denke, was Sie wollen stattdessen-Test ist Worker .props:

child = context.actorOf(TestWorker.props("test-file"), name = "child-actor") 
+0

yep, dass es, dumme Fehler festgelegt, danke :) – Will

Verwandte Themen