package com.jibug.cetty.core.net;

import com.jibug.cetty.core.Payload;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.concurrent.FutureCallback;
import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
import org.apache.http.util.EntityUtils;

import java.io.IOException;

/**
 * @author heyingcai
 */
public class AsyncHttpClientTest {

    public static void main(String[] args) {
        HttpClientGenerator<CloseableHttpAsyncClient> asyncHttpClientGenerator = new AsyncHttpClientGenerator();
        Payload payload = new Payload();
        CloseableHttpAsyncClient client = asyncHttpClientGenerator.getClient(payload);

        client.start();

        final HttpGet[] requests = new HttpGet[]{
                new HttpGet("http://www.apache.org/"),
                new HttpGet("http://www.baidu.com/"),
                new HttpGet("http://www.oschina.net/")
        };

        for(final HttpGet request: requests){
            client.execute(request, new FutureCallback(){
                @Override
                public void completed(Object obj) {
                    final HttpResponse response = (HttpResponse)obj;
                    System.out.println(request.getRequestLine() + "->" + response.getStatusLine());
                }

                @Override
                public void failed(Exception excptn) {
                    System.out.println(request.getRequestLine() + "->" + excptn);
                }

                @Override
                public void cancelled() {
                    System.out.println(request.getRequestLine() + "cancelled");
                }
            });
        }


//        for (int i = 0; i < 2; i++) {
//            HttpRequestBase httpGet = new HttpGet("http://www.baidu.com");
//            client.execute(httpGet, new Back());
//            System.out.println("index :" + i);
//            httpGet.releaseConnection();
//        }

//        client.execute(httpGet, new Back());
    }

    static class Back implements FutureCallback<HttpResponse> {

        @Override
        public void completed(HttpResponse httpResponse) {
            try {
                System.out.println(EntityUtils.toString(httpResponse.getEntity()));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void failed(Exception e) {
            System.err.println("error:" + e);
        }

        @Override
        public void cancelled() {

        }
    }
}