Hi,
I have been making use of the ReceiveBuilder for a short amount of time to
control the receive logic for my actors. I was storing an instance of the
ReceiveBuilder in a variable and then passing it into a method to attach
some further "match" clauses before building it and the actor "becoming
it". This all worked perfectly fine and any received messages were handled
correctly.
However, if the above process occurred and then was triggered again with a
different instance of the ReceiveBuilder (stored in a separate variable) it
would change to the receive logic defined in the second variable but then
be unable to change back to the original variables logic. I.e. it appears
that the original ReceiveBuilder variable cannot be reused.
We have worked around this issue currently by simply making a getter method
that provides a new instance of the ReceiveBuilder each time it is required
but would like some clarity as to the reasoning why the original approach
did not work.
Simple example : At the end of "changeReceiveLogic" running it would be
expected that the example actor would be able to handle
LoadingMessage.class and run processLoadingMessage but it does not.
private UnitPFBuilder<Object> RECEIVE_WHEN_LOADING
= ReceiveBuilder
.match(LoadingMessage.class, this::processLoadingMessage);
private UnitPFBuilder<Object> RECEIVE_WHEN_READY
= ReceiveBuilder
.match(ReadyMessage.class, this::processReadyMessage);
private void completeReceiveBuilderAndBecome(final
UnitPFBuilder<Object> receiveLogic) {
getContext().become(receiveLogic
.match(GenericMessage.class, this::processGenericMessage)
.build());
}
private void changeReceiveLogic(){
completeReceiveBuilderAndBecome(RECEIVE_WHEN_LOADING);
completeReceiveBuilderAndBecome(RECEIVE_WHEN_READY);
completeReceiveBuilderAndBecome(RECEIVE_WHEN_LOADING);
}
Thanks,
Adam
--
>>>>>>>>>> Read the docs: http://akka.io/docs/
>>>>>>>>>> Check the FAQ:
>>>>>>>>>> http://doc.akka.io/docs/akka/current/additional/faq.html
>>>>>>>>>> Search the archives: https://groups.google.com/group/akka-user
---
You received this message because you are subscribed to the Google Groups "Akka
User List" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/akka-user.
For more options, visit https://groups.google.com/d/optout.