I built an Akka FSM that spawns two child actors in its constructor and only receives messages from one of them.
val lhsRef: ActorRef = context.actorOf(Props(new PrimitiveNode(tpe)), "lhs")
val rhsRef: ActorRef = context.actorOf(Props(new PrimitiveNode(tpe)), "rhs")
When dealing with incoming events, I want to filter for those that come from lhsNode. I tried to achieve this the following way:
when(WaitFor1) {
case Event(event: SomeEventType, _) =>
// Control flow reaches this point but...
if (sender == lhsRef) {
// ...it never enters the if clause.
This does not work. In fact, sender and lhsNodeare not equal, even though it's definitely lhsNode that sends messages to my FSM.
sender() Actor[akka://default/user/$a#670517729]
lhsNode Actor[akka://default/user/$a/$a/$b/lhs#-354253348]
What am I doing wrong?
Compare only the names of the
senderandlhs. Check if message is really sent by thelhsNode.or
Ensure that the
senderis thelhsactor only.forwardthe message if any other actor is involved in between.Something like below
with Pattern match guard