2016-10-16 6 views
0

私は2人の子アクターをコンストラクターに生成し、そのうちの1人からのメッセージのみを受信するAkka FSMを構築しました。子アクターからのメッセージのみを処理する方法は?

val lhsRef: ActorRef = context.actorOf(Props(new PrimitiveNode(tpe)), "lhs") 
val rhsRef: ActorRef = context.actorOf(Props(new PrimitiveNode(tpe)), "rhs") 

着信イベントを処理するときは、lhsNodeからのものをフィルタリングしたいと思います。私は次のようにこれを達成しようとしました:

when(WaitFor1) { 
    case Event(event: SomeEventType, _) => 
    // Control flow reaches this point but... 
    if (sender == lhsRef) { 
     // ...it never enters the if clause. 

これは動作しません。実際には、私のFSMにメッセージを送信するのは間違いなくlhsNodeですが、senderlhsNodeは等しくありません。

sender()  Actor[akka://default/user/$a#670517729] 
lhsNode   Actor[akka://default/user/$a/$a/$b/lhs#-354253348] 

私は間違っていますか?

答えて

1

senderlhsの名前のみを比較してください。メッセージが実際にlhsNodeによって送信されているかどうかを確認します。

sender.path.name == "lhs" 

または

sender.path.name = lhsNode.path.name 

senderだけlhs俳優であることを確認してください。 forward間に他のアクターが関わっている場合はメッセージ。

パターン・マッチ・ガード

when(WaitFor1) { 
    case Event(event: SomeEventType, _) (if sender.path.name == "lhs") => 
+0

when(WaitFor1) { case Event(event: SomeEventType, _) => // ... if (sender.path.name == "lhs") { // .... 

以下のような何かあなたの側のコメントは、それを解決:偶発的なメッセージ転送が問題でした。ありがとう! :) – lambdarookie

関連する問題