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> | 			<artifactId>logback-classic</artifactId> | ||||||
| 			<version>${logback.version}</version> | 			<version>${logback.version}</version> | ||||||
| 		</dependency> | 		</dependency> | ||||||
|  | 		<dependency> | ||||||
|  | 			<groupId>io.undertow</groupId> | ||||||
|  | 			<artifactId>undertow-core</artifactId> | ||||||
|  | 			<version>2.2.22.Final</version> | ||||||
|  | 		</dependency> | ||||||
| 		<dependency> | 		<dependency> | ||||||
| 			<groupId>org.junit.jupiter</groupId> | 			<groupId>org.junit.jupiter</groupId> | ||||||
| 			<artifactId>junit-jupiter-api</artifactId> | 			<artifactId>junit-jupiter-api</artifactId> | ||||||
| 			<scope>test</scope> |  | ||||||
| 		</dependency> | 		</dependency> | ||||||
| 	</dependencies> | 	</dependencies> | ||||||
| 
 | 
 | ||||||
|  | @ -83,7 +87,7 @@ | ||||||
| 		<connection>scm:git:git://gittr.ch/java/labyrinth-server.git</connection> | 		<connection>scm:git:git://gittr.ch/java/labyrinth-server.git</connection> | ||||||
| 		<developerConnection>scm:git:ssh://git@gittr.ch/java/labyrinth-server.git</developerConnection> | 		<developerConnection>scm:git:ssh://git@gittr.ch/java/labyrinth-server.git</developerConnection> | ||||||
| 		<url>https://gittr.ch/java/labyrinth-server</url> | 		<url>https://gittr.ch/java/labyrinth-server</url> | ||||||
| 		<tag>v0.0.1</tag> | 		<tag>HEAD</tag> | ||||||
| 	</scm> | 	</scm> | ||||||
| 	<distributionManagement> | 	<distributionManagement> | ||||||
| 		<repository> | 		<repository> | ||||||
|  |  | ||||||
|  | @ -1,11 +1,21 @@ | ||||||
| package ch.fritteli.labyrinth.server; | package ch.fritteli.labyrinth.server; | ||||||
| 
 | 
 | ||||||
|  | import ch.fritteli.labyrinth.server.undertow_playground.UndertowPlayground; | ||||||
|  | import io.undertow.Undertow; | ||||||
| import lombok.extern.slf4j.Slf4j; | import lombok.extern.slf4j.Slf4j; | ||||||
| 
 | 
 | ||||||
| @Slf4j | @Slf4j | ||||||
| public class Main { | public class Main { | ||||||
|     public static void main(String[] args) { |     public static void main(String[] args) { | ||||||
|         LabyrinthServer.createAndStartServer() | //        LabyrinthServer.createAndStartServer() | ||||||
|                 .onEmpty(() -> log.error("Failed to create server. Stopping.")); | //                .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…
	
	Add table
		Add a link
		
	
		Reference in a new issue