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); } } }