package io.monokkel.actors;
import akka.actor.Props;
import akka.actor.UntypedActor;
import akka.japi.Creator;
import io.monokkel.core.UrlVisitor;
import io.monokkel.domain.UrlVisitResponse;
import io.monokkel.messages.builders.UnparsedResponseMessageBuilder;
import io.monokkel.messages.VisitUrl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Created by tarjei on 28/05/14.
*/
public class UrlVisitorActor extends UntypedActor {
private static Logger log = LoggerFactory.getLogger(UrlVisitorActor.class);
private final UrlVisitor urlVisitor;
public UrlVisitorActor(UrlVisitor urlVisitor) {
this.urlVisitor = urlVisitor;
}
public static Props props(UrlVisitor urlVisitor) {
return Props.create(UrlVisitorActor.class, new Creator<UrlVisitorActor>() {
@Override
public UrlVisitorActor create() throws Exception {
return new UrlVisitorActor(urlVisitor);
}
});
}
@Override
public void onReceive(Object message) throws Exception {
if (message instanceof VisitUrl) {
VisitUrl visitUrl = (VisitUrl) message;
final UrlVisitResponse urlVisitResponse = urlVisitor.visitUrlAndRespond(visitUrl.getUrl());
if (urlVisitResponse != null) {
Integer depth = visitUrl.getDepth() + 1;
getSender().tell(new UnparsedResponseMessageBuilder().setResponse(urlVisitResponse.getResponse()).setTimeStamp(urlVisitResponse.getTimeStamp()).setUrl(urlVisitResponse.getUrl()).setDepth(depth).setMaxDepth(visitUrl.getMaxDepth()).setTypesFromTheResponseHeader(urlVisitResponse.getTypesFromTheResponseHeader()).createUnparsedResponse(), getSender());
}
} else {
unhandled(message);
}
}
}