package org.webpieces.frontend2.impl;
import java.util.concurrent.CompletableFuture;
import org.webpieces.frontend2.api.FrontendSocket;
import org.webpieces.frontend2.api.FrontendStream;
import com.webpieces.hpack.api.dto.Http2Headers;
import com.webpieces.hpack.api.dto.Http2Push;
import com.webpieces.http2engine.api.StreamWriter;
import com.webpieces.http2engine.api.server.ResponseHandler;
public class Http2StreamImpl implements FrontendStream {
private FrontendSocketImpl socket;
private boolean sentResponseHeaders;
private ResponseHandler responseHandler;
public Http2StreamImpl(FrontendSocketImpl socket, ResponseHandler responseHandler) {
this.socket = socket;
this.responseHandler = responseHandler;
}
@Override
public CompletableFuture<StreamWriter> sendResponse(Http2Headers headers) {
sentResponseHeaders = true;
return responseHandler.sendResponse(headers);
}
@Override
public CompletableFuture<StreamWriter> sendPush(Http2Push push) {
if(sentResponseHeaders)
throw new IllegalStateException("You must call sendPush before sendResponse, but after "
+ "that can send both datastreams back at the "
+ "same time(see http2 spec for why). it also helps memory pressure this way");
return responseHandler.sendPush(push);
}
@Override
public void cancelStream() {
responseHandler.cancelStream();
}
@Override
public FrontendSocket getSocket() {
return socket;
}
}