Métodos receive () do ator Chain Akka usando traits

À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 * /
}
}