/src/main/java/tkocsis/akka/lpr/http/HttpServer.java

https://gitlab.com/tkocsis/akka-tutorial · Java · 117 lines · 101 code · 16 blank · 0 comment · 0 complexity · 1aa86924fb9ed47092fbfb825c55ea70 MD5 · raw file

  1. package tkocsis.akka.lpr.http;
  2. import java.util.concurrent.CompletableFuture;
  3. import org.json.JSONObject;
  4. import akka.NotUsed;
  5. import akka.actor.ActorSystem;
  6. import akka.http.javadsl.ConnectHttp;
  7. import akka.http.javadsl.Http;
  8. import akka.http.javadsl.marshallers.jackson.Jackson;
  9. import akka.http.javadsl.model.ContentTypes;
  10. import akka.http.javadsl.model.HttpEntities;
  11. import akka.http.javadsl.model.HttpRequest;
  12. import akka.http.javadsl.model.HttpResponse;
  13. import akka.http.javadsl.server.AllDirectives;
  14. import akka.http.javadsl.server.Route;
  15. import akka.http.javadsl.unmarshalling.Unmarshaller;
  16. import akka.stream.ActorMaterializer;
  17. import akka.stream.javadsl.Flow;
  18. import akka.stream.javadsl.Source;
  19. import akka.util.ByteString;
  20. import tkocsis.akka.lpr.LprLiveFeedSource;
  21. import tkocsis.akka.lpr.graphql.GraphQLService;
  22. public class HttpServer {
  23. static class GrahpQLDataQuery {
  24. String query;
  25. String variables;
  26. public GrahpQLDataQuery() {
  27. }
  28. public GrahpQLDataQuery(String data, String variables) {
  29. this.query = data;
  30. this.variables = variables;
  31. }
  32. public void setQuery(String query) {
  33. this.query = query;
  34. }
  35. public String getQuery() {
  36. return query;
  37. }
  38. public String getVariables() {
  39. return variables;
  40. }
  41. public void setVariables(String variables) {
  42. this.variables = variables;
  43. }
  44. }
  45. private class LprHttpRoutes extends AllDirectives {
  46. public Route createRoutes() {
  47. return route(
  48. path("api", () -> route(
  49. get(() -> complete("aaa")),
  50. post(() -> complete("bbb"))
  51. )),
  52. path("lprstream", () -> route(
  53. get(() -> {
  54. Source<Object, NotUsed> plates = Source.unfoldResourceAsync(
  55. () -> {
  56. CompletableFuture<LprLiveFeedSource> fut = new CompletableFuture<>();
  57. fut.complete(new LprLiveFeedSource(actorSystem));
  58. return fut;
  59. },
  60. liveFeed -> liveFeed.nextPlate(),
  61. reader -> reader.close());
  62. return complete(
  63. HttpEntities.create(
  64. ContentTypes.TEXT_PLAIN_UTF8,
  65. plates.map(x -> ByteString.fromString(x + "\n"))
  66. )
  67. );
  68. })
  69. )),
  70. path("graphql", () -> route(
  71. get(() -> {
  72. return complete("Teszt");
  73. }),
  74. post(() -> entity(Jackson.unmarshaller(GrahpQLDataQuery.class), graphQuery -> {
  75. JSONObject object = new JSONObject();
  76. object.put("data", new GraphQLService().query(graphQuery.getQuery()));
  77. return complete(object.toString());
  78. }))
  79. )),
  80. path("teszt", () -> route(
  81. get(() -> {
  82. return complete("Teszt");
  83. }),
  84. post(() -> entity(Unmarshaller.entityToString(), str -> {
  85. System.out.println(str);
  86. return complete(str);
  87. }))
  88. ))
  89. );
  90. }
  91. }
  92. private ActorSystem actorSystem;
  93. public HttpServer(ActorSystem actorSystem) {
  94. this.actorSystem = actorSystem;
  95. Http http = Http.get(actorSystem);
  96. ActorMaterializer materializer = ActorMaterializer.create(actorSystem);
  97. LprHttpRoutes routes = new LprHttpRoutes();
  98. Flow<HttpRequest, HttpResponse, NotUsed> flow = routes.createRoutes().flow(actorSystem, materializer);
  99. http.bindAndHandle(flow, ConnectHttp.toHost("10.30.0.80", 8080), materializer);
  100. }
  101. }