package com.webpieces.http2engine.impl.svr;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.atomic.AtomicInteger;
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;
import com.webpieces.http2engine.impl.shared.Stream;
public class ResponseHandlerImpl implements ResponseHandler {
private Level1ServerEngine level1ServerEngine;
private Stream stream;
private AtomicInteger pushIdGenerator;
public ResponseHandlerImpl(Level1ServerEngine level1ServerEngine, Stream stream, AtomicInteger idGenerator) {
this.level1ServerEngine = level1ServerEngine;
this.stream = stream;
this.pushIdGenerator = idGenerator;
}
@Override
public CompletableFuture<StreamWriter> sendResponse(Http2Headers headerPiece) {
headerPiece.setStreamId(stream.getStreamId());
return level1ServerEngine.sendResponseHeaders(stream, headerPiece);
}
@Override
public CompletableFuture<StreamWriter> sendPush(Http2Push push) {
if(push.getStreamId() != stream.getStreamId())
throw new IllegalArgumentException("push has incorrect stream id as you are sending it on stream="+stream.getStreamId()+" push="+push);
else if(push.getPromisedStreamId() != 0)
throw new IllegalArgumentException("WE WILL SET the Http2Push.promisedStreamId so you should leave it as 0. push="+push);
int promisedId = pushIdGenerator.getAndAdd(2);
push.setPromisedStreamId(promisedId);
return level1ServerEngine.sendPush(push);
}
@Override
public void cancelStream() {
}
}