package test.codec.http2; import com.firefly.codec.http2.frame.*; import com.firefly.codec.http2.stream.HTTP2Configuration; import com.firefly.codec.http2.stream.Session; import com.firefly.codec.http2.stream.Stream; import com.firefly.codec.http2.stream.Stream.Listener; import com.firefly.server.http2.HTTP2Server; import com.firefly.server.http2.ServerHTTPHandler; import com.firefly.server.http2.ServerSessionListener; import com.firefly.utils.concurrent.Callback; import com.firefly.utils.io.BufferUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.HashMap; import java.util.Map; public class HTTP2ServerDemo { private static Logger log = LoggerFactory.getLogger("firefly-system"); public static void main(String[] args) { final HTTP2Configuration http2Configuration = new HTTP2Configuration(); http2Configuration.setSecureConnectionEnabled(true); http2Configuration.setFlowControlStrategy("simple"); http2Configuration.getTcpConfiguration().setTimeout(60 * 1000); final Map<Integer, Integer> settings = new HashMap<>(); settings.put(SettingsFrame.HEADER_TABLE_SIZE, http2Configuration.getMaxDynamicTableSize()); settings.put(SettingsFrame.INITIAL_WINDOW_SIZE, http2Configuration.getInitialStreamSendWindow()); HTTP2Server server = new HTTP2Server("127.0.0.1", 6677, http2Configuration, new ServerSessionListener() { @Override public Map<Integer, Integer> onPreface(Session session) { log.info("server received preface: {}", session); return settings; } @Override public Listener onNewStream(Stream stream, HeadersFrame frame) { log.info("server created new stream: {}", stream.getId()); log.info("server created new stream headers: {}", frame.getMetaData().toString()); return new Listener() { @Override public void onHeaders(Stream stream, HeadersFrame frame) { log.info("server received headers: {}", frame.getMetaData()); } @Override public Listener onPush(Stream stream, PushPromiseFrame frame) { return null; } @Override public void onData(Stream stream, DataFrame frame, Callback callback) { log.info("server received data {}, {}", BufferUtils.toUTF8String(frame.getData()), frame); callback.succeeded(); } @Override public void onReset(Stream stream, ResetFrame frame) { log.info("server reseted: {} | {}", stream, frame); } @Override public boolean onIdleTimeout(Stream stream, Throwable x) { log.info("idle timeout", x); return true; } }; } @Override public void onSettings(Session session, SettingsFrame frame) { log.info("server received settings: {}", frame); } @Override public void onPing(Session session, PingFrame frame) { } @Override public void onReset(Session session, ResetFrame frame) { log.info("server reset " + frame); } @Override public void onClose(Session session, GoAwayFrame frame) { log.info("server closed " + frame); } @Override public void onFailure(Session session, Throwable failure) { log.error("server failure, {}", failure, session); } @Override public void onAccept(Session session) { } @Override public boolean onIdleTimeout(Session session) { return false; } }, new ServerHTTPHandler.Adapter()); server.start(); } }