package com.ogosecurity.proxy.http2samples;

import java.io.IOException;
import java.io.OutputStream;
import java.nio.ByteBuffer;

import org.apache.hc.client5.http.async.methods.AbstractBinResponseConsumer;
import org.apache.hc.core5.http.ContentType;
import org.apache.hc.core5.http.HttpException;
import org.apache.hc.core5.http.HttpResponse;
import org.apache.hc.core5.http.message.StatusLine;

/**
 * Concrete implementation of AbstractBinResponseConsumer for Async calls from test classes
 * @author Nicolas de Pomereu
 *
 */
public class OutputStreamBinResponseConsumer extends AbstractBinResponseConsumer<Void> {

	private OutputStream out = null;
	    
        public OutputStreamBinResponseConsumer(OutputStream out) {
	    super();
	    this.out = out;
	}

	@Override
        protected void start(
                final HttpResponse response,
                final ContentType contentType) throws HttpException, IOException {
	    
	    StatusLine statusLine = new StatusLine(response);
            System.out.println("requestUri" + "->" + statusLine);
                        
        }

	@Override
	protected void data(ByteBuffer src, boolean endOfStream) throws IOException {
            while (src.hasRemaining()) {
                out.write(src.get());
            }
            if (endOfStream) {
        	out.close();
            }
	}
	
        @Override
        protected int capacityIncrement() {
            return Integer.MAX_VALUE;
        }
               

        @Override
        public void failed(final Exception cause) {
            System.out.println("requestUri" + "->" + cause);
        }

        @Override
        public void releaseResources() {
        }

	@Override
	protected Void buildResult() {
	    return null;
	}
    
}
