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 ProxyTestTask extends RequestTask {
private static final String urlStr = "http://www.111cn.net";
private static final Url url = Url.newHttpGetUrl(urlStr);
private final Proxy proxy;
private static Logger logger = LogManager.getLogger(ProxyTestTask.class.getName());
private final CommonSource commonSource;
private final ProxyController proxyController;
public ProxyTestTask(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){
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.getProxyPool().offer(proxy);
logger.info("插入proxy:{}:{} 可用proxy数量:{}",proxy.getHost(),proxy.getPort(),proxyController.getProxyPool().size());
//存到可用表
proxyController.getProxyOkService().insert(proxy);
proxyController.getProxyService().updateProxy(proxy);
}
}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.getProxyService().updateProxy(proxy);
}
}
}
@Override
public void onRequestException(Exception e, Url url, HttpRequestBase httpRequest) {
}
@Override
protected boolean onStatusCode(int statusCode, CloseableHttpResponse response) {
logger.info("satusCode{},{}:{}",statusCode,getProxy().getHost(),getProxy().getPort());
return statusCode>=200 && statusCode<300;
}
@Override
protected void onInit() {
}
}