À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 => / * Eu sou o primeiro a lidar com mensagens * /
}
}
class MyActor extends Handler with Receiving {
receiver {
case SomeMessage => / * Handler não manipulou, recebo a mensagem * /
}
}