package com.jackson.task.proxy;
import com.jackson.common.source.CommonSource;
import com.jackson.common.control.ProxyController;
import com.jackson.db.po.Proxy;
import com.jackson.db.po.Url;
import com.jackson.task.RequestTask;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
* Created by Jackson on 2016/11/17.
*/
@Deprecated
public class ProxyOkTestTask extends RequestTask {
private static final String urlStr = "http://www.baidu.com";
private static final Url url = Url.newHttpGetUrl(urlStr);
private final Proxy proxy;
private static Logger logger = LogManager.getLogger(ProxyOkTestTask.class.getName());
private final CommonSource commonSource;
private final ProxyController proxyController;
public ProxyOkTestTask(ProxyController proxyController,Proxy proxy) {
this.proxy=proxy;
this.proxyController = proxyController;
commonSource = proxyController.getCommonSource();
}
@Override
protected Url getUrl() {
return url;
}
@Override
protected Proxy getProxy() {
return proxy;
}
@Override
public HttpRequestBase getHttpRequest() {
return commonSource.pollHttpGet(getUrl());
}
@Override
public void onRequestFinish(boolean isRequestOk, CloseableHttpClient httpClient, HttpRequestBase httpRequest, Url url) {
commonSource.offerHttpGet((HttpGet) httpRequest);
long currentTimeMillis = System.currentTimeMillis();
if(isRequestOk){
if(proxy.getId()==0){//id为0 代表是直接存入内存进行测试的proxy
proxyController.getProxyOkService().insert(proxy);
proxyController.getProxyService().insert(proxy);
}else {
//记录
proxy.setLastTestTime(currentTimeMillis);
proxy.setLastAvailableTime(currentTimeMillis);
proxy.setSpeed(getSpeed());
proxy.setAvailableCount(proxy.getAvailableCount()+1);
proxy.setTestCount(proxy.getTestCount()+1);
proxy.setState(Proxy.STATE_TAKEN_OUT);
//更新可用表
proxyController.getProxyOkService().updateProxy(proxy);
}
//存入内存中
proxyController.getProxyPool().offer(proxy);
logger.info("插入proxy:{}:{} 可用proxy数量:{}",proxy.getHost(),proxy.getPort(),proxyController.getProxyPool().size());
}else {
if(proxy.getId()==0){
proxyController.getProxyService().insert(proxy);
}else {
//1、记录
proxy.setLastTestTime(currentTimeMillis);
proxy.setTestCount(proxy.getTestCount()+1);
proxy.setState(Proxy.STATE_TAKEN_OUT);
proxyController.getProxyOkService().updateProxy(proxy);
}
}
}
@Override
public void onRequestException(Exception e, Url url, HttpRequestBase httpRequest) {
//logger.error("exception{}",e);
}
@Override
protected boolean onStatusCode(int statusCode, CloseableHttpResponse response) {
logger.debug("测试proxy satusCode{},{}:{}",statusCode,getProxy().getHost(),getProxy().getPort());
return statusCode>=200 && statusCode<300;
}
@Override
protected void onInit() {
}
}