package com.jackson.common.control; import com.jackson.bean.Bundle; import com.jackson.common.source.CommonSource; import com.jackson.common.task.SimpleQueueRequestTask; import com.jackson.common.task.SimpleRequestTask; import com.jackson.db.po.Proxy; import com.jackson.db.po.Url; import com.jackson.db.service.IDaoService; import com.jackson.task.CreateTaskThread; import com.jackson.task.queue.QueueTaskCollection; import com.jackson.task.queue.QueueTaskCollections; import com.jackson.task.queue.RequestQueueTask; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpRequestBase; import java.util.LinkedList; import java.util.concurrent.ScheduledThreadPoolExecutor; /** * Created by Jackson on 2017/2/13. * 还有bug */ @Deprecated public class SimpleQueReqTaskControl { /* private final QueueTaskHandle handle; private ProxyController proxyController; private int maxTaskCache; private TaskThread taskThread; public SimpleQueReqTaskControl setMaxTaskCache(int maxTaskCache) { this.maxTaskCache = maxTaskCache; return this; } public SimpleQueReqTaskControl setMinTaskCache(int minTaskCache) { this.minTaskCache = minTaskCache; return this; } private int minTaskCache; private int threadSize; private QueueTaskCollections collections; private CommonSource source; private DelayHandle delayHandle; public static SimpleQueReqTaskControl newInstance(QueueTaskHandle handle) { return new SimpleQueReqTaskControl(handle); } public static SimpleQueReqTaskControl newInstance(QueueTaskHandle handle, ProxyController proxyController) { return new SimpleQueReqTaskControl(handle, proxyController); } private SimpleQueReqTaskControl(QueueTaskHandle handle, ProxyController proxyController) { this.handle = handle; this.proxyController = proxyController; collections = QueueTaskCollections.newInstance(); source = CommonSource.newInstance(); taskThread = new TaskThread(collections,source.getThreadPool()); } private SimpleQueReqTaskControl(QueueTaskHandle handle) { this(handle, null); } public SimpleQueReqTaskControl setDelay(DelayHandle delayHandle) { this.delayHandle = delayHandle; return this; } public void start() { taskThread.setMinTaskCache(minTaskCache).setMaxTaskCache(maxTaskCache); source.getThreadPool().setCorePoolSize(threadSize); taskThread.start(); } public SimpleQueReqTaskControl setThreadSize(int threadSize) { this.threadSize = threadSize; return this; } public interface Request { Url getUrl(); HttpRequestBase getHttpRequest(HttpRequestBase request, Bundle bundle); QueueTaskCollection.TaskProcess onRequestFailed(); boolean onResponseHandle(Proxy proxy, ProxyController proxyController, Url url, HttpRequestBase request, CloseableHttpResponse response, String content, Bundle bundle); QueueTaskCollection.TaskProcess onParseFinish(boolean parseSuccess, Url url, String content); } public static class Collection { private final Bundle bundle; private final LinkedList<Request> list; public Collection(Bundle bundle) { this.bundle = bundle; list = new LinkedList(); } public void add(Request request) { list.add(request); } private Request remove() { return list.removeFirst(); } private Bundle getBundle() { return bundle; } } private static class SimpleRequest extends SimpleQueueRequestTask { private final Request requestObj; public SimpleRequest(Request requestObj, CommonSource source) { super(requestObj.getUrl(), source); this.requestObj = requestObj; } @Override protected HttpRequestBase getHttpRequest(HttpRequestBase request, Bundle bundle) { return requestObj.getHttpRequest(request, bundle); } @Override protected QueueTaskCollection.TaskProcess onRequestFailed() { return requestObj.onRequestFailed(); } @Override protected boolean onResponseHandle(Proxy proxy, ProxyController proxyController, Url url, HttpRequestBase request, CloseableHttpResponse response, String content, Bundle bundle) { return requestObj.onResponseHandle(proxy, proxyController, url, request, response, content, bundle); } @Override protected QueueTaskCollection.TaskProcess onParseFinish(boolean parseSuccess, Url url, String content) { return requestObj.onParseFinish(parseSuccess, url, content); } } private class TaskThread extends CreateTaskThread<RequestQueueTask> { public TaskThread(IDaoService<RequestQueueTask> service, ScheduledThreadPoolExecutor threadPool) { super(service, threadPool); } @Override protected Runnable getTask(RequestQueueTask task) { if (task == null) { Collection collection = handle.getTaskCollection(); QueueTaskCollection queueTaskCollection = QueueTaskCollection.newInstance(collection.getBundle()); queueTaskCollection.addLast(new SimpleRequest(collection.remove(), source)); collections.add(queueTaskCollection); } if (proxyController != null) { task.setProxy(); return task; } else { return task; } } @Override protected long getDelay(RequestQueueTask task) { if (delayHandle != null) { return delayHandle.getDelay(task.getUrl()); } else { return 0; } } } public interface QueueTaskHandle { Collection getTaskCollection(); } public interface DelayHandle { long getDelay(Url url); } */ }