The behavior of the fetcher manager depends on whether it has work to give out to the fetchers:
GiveMeWork
messages with a Fetcher.Fetch
messageGiveMeWork
messages and, if work gets added, it must send a WorkAvailable
message to the fetchersEncoding the notion of state is straightforward in Akka. We specify different receive
methods and switch from one to the other depending on the state. We will define the following receive
methods for our fetcher manager, corresponding to each of the states:
// receive method when the queue is empty def receiveWhileEmpty: Receive = { ... } // receive method when the queue is not empty def receiveWhileNotEmpty: Receive = { ... }
Note that we must define the return type of the receive methods as Receive
. To switch the actor from one method to the other, we can use context.become(methodName)
. Thus, for instance, when the last login name is popped off the queue, we can transition to using the receiveWhileEmpty
method with context.become(receiveWhileEmpty)
. We set the initial state by assigning receiveWhileEmpty
to the receive
method:
def receive = receiveWhileEmpty