package models.com.mc.workers;
import akka.actor.ActorRef;
import akka.actor.UntypedActor;
import akka.contrib.pattern.DistributedPubSubExtension;
import akka.contrib.pattern.DistributedPubSubMediator;
import akka.event.Logging;
import akka.event.LoggingAdapter;
import mc.messages.TextMessage;
import mc.messages.store.ObjectDBMsgStore;
import models.com.mc.workers.Master.WorkResult;
public class MessageCollector extends UntypedActor {
ObjectDBMsgStore odbMsgStore;
/* (non-Javadoc)
* @see akka.actor.UntypedActor#preStart()
*/
@Override
public void preStart() throws Exception {
super.preStart();
// Set ObjectDBMsgStore instance
odbMsgStore = new ObjectDBMsgStore();
}
private ActorRef mediator = DistributedPubSubExtension.get(getContext().system()).mediator();
private LoggingAdapter log = Logging.getLogger(getContext().system(), this);
{
mediator.tell(new DistributedPubSubMediator.Subscribe(Master.ResultsTopic, getSelf()), getSelf());
}
@Override
public void onReceive(Object message) {
if (message instanceof DistributedPubSubMediator.SubscribeAck) {
// do nothing
}
else if (message instanceof WorkResult) {
WorkResult workResult = (WorkResult) message;
log.info("Consumed result: {}", workResult.result);
//save messages
odbMsgStore.offer((TextMessage) workResult.getResult());
}
else {
unhandled(message);
}
}
}