Intermediate commit; to be amended.
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
4f2802db19
commit
682e0d0f25
3 changed files with 96 additions and 4 deletions
8
pom.xml
8
pom.xml
|
@ -48,10 +48,14 @@
|
|||
<artifactId>logback-classic</artifactId>
|
||||
<version>${logback.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>io.undertow</groupId>
|
||||
<artifactId>undertow-core</artifactId>
|
||||
<version>2.2.22.Final</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter-api</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
@ -83,7 +87,7 @@
|
|||
<connection>scm:git:git://gittr.ch/java/labyrinth-server.git</connection>
|
||||
<developerConnection>scm:git:ssh://git@gittr.ch/java/labyrinth-server.git</developerConnection>
|
||||
<url>https://gittr.ch/java/labyrinth-server</url>
|
||||
<tag>v0.0.1</tag>
|
||||
<tag>HEAD</tag>
|
||||
</scm>
|
||||
<distributionManagement>
|
||||
<repository>
|
||||
|
|
|
@ -1,11 +1,21 @@
|
|||
package ch.fritteli.labyrinth.server;
|
||||
|
||||
import ch.fritteli.labyrinth.server.undertow_playground.UndertowPlayground;
|
||||
import io.undertow.Undertow;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
@Slf4j
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
LabyrinthServer.createAndStartServer()
|
||||
.onEmpty(() -> log.error("Failed to create server. Stopping."));
|
||||
// LabyrinthServer.createAndStartServer()
|
||||
// .onEmpty(() -> log.error("Failed to create server. Stopping."));
|
||||
|
||||
final ServerConfig config = ServerConfig.init();
|
||||
log.info("Starting Server at http://{}:{}/", config.getAddress().getHostAddress(), config.getPort());
|
||||
Undertow.builder()
|
||||
.addHttpListener(config.getPort(), config.getAddress().getHostAddress())
|
||||
.setHandler(UndertowPlayground.r)
|
||||
.build()
|
||||
.start();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,78 @@
|
|||
package ch.fritteli.labyrinth.server.undertow_playground;
|
||||
|
||||
import io.undertow.server.HttpHandler;
|
||||
import io.undertow.server.HttpServerExchange;
|
||||
import io.undertow.server.RoutingHandler;
|
||||
import io.undertow.util.HeaderValues;
|
||||
import io.undertow.util.Headers;
|
||||
import io.undertow.util.HttpString;
|
||||
import io.vavr.control.Option;
|
||||
import lombok.NonNull;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
import java.util.Deque;
|
||||
import java.util.Map;
|
||||
|
||||
@Slf4j
|
||||
public class UndertowPlayground {
|
||||
public static final RoutingHandler r = new RoutingHandler()
|
||||
.get("/create/{output}", new HttpHandler() {
|
||||
@Override
|
||||
public void handleRequest(HttpServerExchange exchange) throws Exception {
|
||||
if (exchange.isInIoThread()) {
|
||||
exchange.dispatch(this);
|
||||
return;
|
||||
}
|
||||
final Map<String, Deque<String>> queryParameters = exchange.getQueryParameters();
|
||||
final Option<String> output = getFirstOption(queryParameters, "output");
|
||||
final Option<Integer> width = getIntOption(queryParameters, "width");
|
||||
final Option<Integer> height = getIntOption(queryParameters, "height");
|
||||
final Option<Integer> id = getIntOption(queryParameters, "id");
|
||||
|
||||
log.info("Output: {}", output);
|
||||
log.info("Width: {}", width);
|
||||
log.info("Height: {}", height);
|
||||
log.info("Id: {}", id);
|
||||
exchange.getResponseSender().send(
|
||||
"Output: " + output +
|
||||
", Width: " + width +
|
||||
", Height: " + height +
|
||||
", Id: " + id
|
||||
);
|
||||
}
|
||||
})
|
||||
.post("/render", new HttpHandler() {
|
||||
@Override
|
||||
public void handleRequest(final HttpServerExchange exchange) {
|
||||
if (exchange.isInIoThread()) {
|
||||
exchange.dispatch(this);
|
||||
return;
|
||||
}
|
||||
exchange.getResponseSender().send("TODO: read body, render stuff");
|
||||
}
|
||||
})
|
||||
.setFallbackHandler(new HttpHandler() {
|
||||
@Override
|
||||
public void handleRequest(HttpServerExchange exchange) throws Exception {
|
||||
exchange.getResponseSender().send("Request: " + exchange.getRequestURI());
|
||||
final HeaderValues strings = exchange.getRequestHeaders().get(Headers.ACCEPT);
|
||||
strings.peekFirst();
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
@NonNull
|
||||
private static Option<String> getFirstOption(@NonNull final Map<String, Deque<String>> queryParams, @NonNull final String paramName) {
|
||||
return Option.of(queryParams.get(paramName))
|
||||
.map(Deque::peek)
|
||||
.flatMap(Option::of);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
private static Option<Integer> getIntOption(@NonNull final Map<String, Deque<String>> queryParams, @NonNull final String paramName) {
|
||||
return getFirstOption(queryParams, paramName)
|
||||
.toTry()
|
||||
.map(Integer::parseInt)
|
||||
.toOption();
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue