package test.codec.http2;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import com.firefly.codec.http2.model.HttpURI;
import com.firefly.codec.http2.model.MetaData;
import com.firefly.codec.http2.stream.HTTP2Configuration;
import com.firefly.codec.http2.stream.HTTPConnection;
import com.firefly.codec.http2.stream.HTTPOutputStream;
import com.firefly.server.http2.HTTP2Server;
import com.firefly.server.http2.ServerHTTPHandler;
import com.firefly.server.http2.ServerSessionListener;
import com.firefly.utils.collection.MultiMap;
import com.firefly.utils.io.BufferUtils;
public class HTTP1ServerDemo3 {
public static void main(String[] args) {
final HTTP2Configuration http2Configuration = new HTTP2Configuration();
http2Configuration.getTcpConfiguration().setTimeout(10 * 60 * 1000);
HTTP2Server server = new HTTP2Server("localhost", 6678, http2Configuration, new ServerSessionListener.Adapter(),
new ServerHTTPHandler.Adapter() {
@Override
public void earlyEOF(MetaData.Request request, MetaData.Response response, HTTPOutputStream output,
HTTPConnection connection) {
System.out.println("the server connection " + connection.getSessionId() + " is early EOF");
}
@Override
public void badMessage(int status, String reason, MetaData.Request request,
MetaData.Response response, HTTPOutputStream output, HTTPConnection connection) {
System.out.println("the server received a bad message, " + status + "|" + reason);
try {
connection.close();
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public boolean content(ByteBuffer item, MetaData.Request request, MetaData.Response response,
HTTPOutputStream output, HTTPConnection connection) {
System.out
.println("server received data: " + BufferUtils.toString(item, StandardCharsets.UTF_8));
return false;
}
@Override
public boolean accept100Continue(MetaData.Request request, MetaData.Response response,
HTTPOutputStream output, HTTPConnection connection) {
System.out.println(
"the server received a 100 continue header, the path is " + request.getURI().getPath());
return false;
}
@Override
public boolean messageComplete(MetaData.Request request, MetaData.Response response,
HTTPOutputStream outputStream, HTTPConnection connection) {
HttpURI uri = request.getURI();
System.out.println("current path is " + uri.getPath());
System.out.println("current parameter string is " + uri.getQuery());
System.out.println("current http headers are " + request.getFields());
MultiMap<String> parameterMap = new MultiMap<String>();
uri.decodeQueryTo(parameterMap);
System.out.println("current parameters are " + parameterMap);
if (uri.getPath().equals("/index")) {
response.setStatus(200);
List<ByteBuffer> list = new ArrayList<>();
list.add(BufferUtils.toBuffer("hello the server demo ", StandardCharsets.UTF_8));
list.add(BufferUtils.toBuffer("test chunk 1 ", StandardCharsets.UTF_8));
list.add(BufferUtils.toBuffer("test chunk 2 ", StandardCharsets.UTF_8));
list.add(BufferUtils.toBuffer("中文的内容,哈哈 ", StandardCharsets.UTF_8));
list.add(BufferUtils.toBuffer("靠!!! ", StandardCharsets.UTF_8));
try (HTTPOutputStream output = outputStream) {
output.writeWithContentLength(list.toArray(BufferUtils.EMPTY_BYTE_BUFFER_ARRAY));
} catch (IOException e) {
e.printStackTrace();
}
} else if (uri.getPath().equals("/testContinue")) {
response.setStatus(200);
try (HTTPOutputStream output = outputStream) {
output.writeWithContentLength(BufferUtils.toBuffer("receive Continue-100 successfully ",
StandardCharsets.UTF_8));
} catch (IOException e) {
e.printStackTrace();
}
} else {
response.setStatus(404);
try (HTTPOutputStream output = outputStream) {
output.writeWithContentLength(BufferUtils.toBuffer("找不到页面", StandardCharsets.UTF_8));
} catch (IOException e) {
e.printStackTrace();
}
}
return true;
}
});
server.start();
}
}