Encadeando métodos receive () do ator Akka

Às vezes, ao escrever atores Akka, você deseja misturar características que também lidam com as mensagens recebidas. O problema é que, se você definir Actor.receive em um traço, não poderá mais defini-lo em traços.

Para resolver isso, pode-se definir um atributo Receiving que encadeia várias funções de recebimento usando orElse:

trait Receiving { 
var receivers = Actor.emptyBehavior
def receiver(next: Actor.Receive) { receivers = receivers orElse next }
def receive = receivers // Actor.receive definition
}

Usar isso em atores com características é fácil:

trait Handler extends Receiving {
receiver
{
case Handle => /* I'm the first to handle messages */
}
}

class MyActor extends Handler with Receiving {
receiver
{
case SomeMessage => /* Handler didn't handle, I receive the message */
}
}

Soluções alternativas disponíveis nos documentos