2016-10-01 62 views
0

我是新來的AKK,我想知道如何讓一個孩子演員接收消息。我不能讓一個孩子演員接收消息

我有一位父母演員打印出它收到一條消息,然後發送一條消息給它的孩子,然後打印出它收到一條消息。

當我運行程序時,只有父主角會打印它的消息。有沒有 我失蹤了?

父演員

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) 

} 

的兒童演員

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) 
} 

回答

0

在TestDirector.preStart,你說

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

這些 「道具」 是測試導演 .props,您在上面導入了幾行代碼,因此您無休止地創建了新的TestDirector。我想你想要什麼,而不是測試是工人 .props:

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

是的是固定的,愚蠢的錯誤,謝謝:) – Will