You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@baremaps.apache.org by bc...@apache.org on 2023/06/17 12:20:39 UTC

[incubator-baremaps] 02/02: Adapt the change listener

This is an automated email from the ASF dual-hosted git repository.

bchapuis pushed a commit to branch server-refactoring
in repository https://gitbox.apache.org/repos/asf/incubator-baremaps.git

commit 4d7ff05d5babaaa9482e211fcd2256e0ec88678c
Author: Bertil Chapuis <bc...@gmail.com>
AuthorDate: Sat Jun 17 14:20:25 2023 +0200

    Adapt the change listener
---
 .../org/apache/baremaps/cli/geocoder/Serve.java    |   4 +-
 .../java/org/apache/baremaps/cli/iploc/Serve.java  |   4 +-
 .../main/java/org/apache/baremaps/cli/map/Dev.java |  15 ++-
 .../java/org/apache/baremaps/cli/map/Serve.java    |   7 +-
 .../org/apache/baremaps/server/ChangeResource.java | 112 +++++++++++++++++++++
 ...ssPathResources.java => ClassPathResource.java} |   4 +-
 .../apache/baremaps/server/DirectoryWatcher.java   |  64 ------------
 ...eocoderResources.java => GeocoderResource.java} |   4 +-
 .../{IpLocResources.java => IpLocResource.java}    |   6 +-
 .../{StyleRessources.java => StyleResource.java}   |   4 +-
 .../{TileResources.java => TileResource.java}      |   4 +-
 ...TilesetRessources.java => TilesetResource.java} |   4 +-
 .../apache/baremaps/server/ViewerResources.java    |  95 -----------------
 13 files changed, 143 insertions(+), 184 deletions(-)

diff --git a/baremaps-cli/src/main/java/org/apache/baremaps/cli/geocoder/Serve.java b/baremaps-cli/src/main/java/org/apache/baremaps/cli/geocoder/Serve.java
index 6a2af117..7a3282c1 100644
--- a/baremaps-cli/src/main/java/org/apache/baremaps/cli/geocoder/Serve.java
+++ b/baremaps-cli/src/main/java/org/apache/baremaps/cli/geocoder/Serve.java
@@ -19,7 +19,7 @@ import io.servicetalk.http.router.jersey.HttpJerseyRouterBuilder;
 import java.nio.file.Path;
 import java.util.concurrent.Callable;
 import org.apache.baremaps.server.CorsFilter;
-import org.apache.baremaps.server.GeocoderResources;
+import org.apache.baremaps.server.GeocoderResource;
 import org.apache.lucene.search.SearcherFactory;
 import org.apache.lucene.search.SearcherManager;
 import org.apache.lucene.store.MMapDirectory;
@@ -53,7 +53,7 @@ public class Serve implements Callable<Integer> {
         var searcherManager = new SearcherManager(directory, new SearcherFactory())) {
       // Configure the application
       var application = new ResourceConfig().register(CorsFilter.class)
-          .register(GeocoderResources.class).register(new AbstractBinder() {
+          .register(GeocoderResource.class).register(new AbstractBinder() {
             @Override
             protected void configure() {
               bind(searcherManager).to(SearcherManager.class).named("searcherManager");
diff --git a/baremaps-cli/src/main/java/org/apache/baremaps/cli/iploc/Serve.java b/baremaps-cli/src/main/java/org/apache/baremaps/cli/iploc/Serve.java
index 4ff2088c..371c395b 100644
--- a/baremaps-cli/src/main/java/org/apache/baremaps/cli/iploc/Serve.java
+++ b/baremaps-cli/src/main/java/org/apache/baremaps/cli/iploc/Serve.java
@@ -23,7 +23,7 @@ import java.util.concurrent.Callable;
 import javax.sql.DataSource;
 import org.apache.baremaps.iploc.IpLocRepository;
 import org.apache.baremaps.server.CorsFilter;
-import org.apache.baremaps.server.IpLocResources;
+import org.apache.baremaps.server.IpLocResource;
 import org.glassfish.hk2.utilities.binding.AbstractBinder;
 import org.glassfish.jersey.server.ResourceConfig;
 import org.slf4j.Logger;
@@ -62,7 +62,7 @@ public class Serve implements Callable<Integer> {
     IpLocRepository ipLocRepository = new IpLocRepository(dataSource);
 
     // Configure the application
-    var application = new ResourceConfig().register(CorsFilter.class).register(IpLocResources.class)
+    var application = new ResourceConfig().register(CorsFilter.class).register(IpLocResource.class)
         .register(new AbstractBinder() {
           @Override
           protected void configure() {
diff --git a/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Dev.java b/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Dev.java
index 1f9084f5..f11b70a8 100644
--- a/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Dev.java
+++ b/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Dev.java
@@ -46,6 +46,7 @@ public class Dev implements Callable<Integer> {
 
   @Mixin
   private Options options;
+
   @Option(names = {"--cache"}, paramLabel = "CACHE", description = "The caffeine cache directive.")
   private String cache = "";
 
@@ -103,17 +104,21 @@ public class Dev implements Callable<Integer> {
       }
     };
 
-    // Configure the application
     var application = new ResourceConfig()
         .register(CorsFilter.class)
-        .register(ViewerResources.class)
-        .register(StyleRessources.class)
-        .register(TileResources.class)
-        .register(ClassPathResources.class)
+        .register(ChangeResource.class)
+        .register(TileResource.class)
+        .register(StyleResource.class)
+        .register(TilesetResource.class)
+        .register(ChangeResource.class)
+        .register(ClassPathResource.class)
         .register(newContextResolver(objectMapper))
         .register(new AbstractBinder() {
           @Override
           protected void configure() {
+            bind(tilesetPath).to(Path.class).named("tileset");
+            bind(stylePath).to(Path.class).named("style");
+            bind("assets").to(String.class).named("directory");
             bind("assets").to(String.class).named("directory");
             bind("viewer.html").to(String.class).named("index");
             bind(tileStoreSupplier).to(tileStoreType);
diff --git a/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Serve.java b/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Serve.java
index ddec8687..e0002b03 100644
--- a/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Serve.java
+++ b/baremaps-cli/src/main/java/org/apache/baremaps/cli/map/Serve.java
@@ -89,9 +89,10 @@ public class Serve implements Callable<Integer> {
     var application =
         new ResourceConfig()
             .register(CorsFilter.class)
-            .register(StyleRessources.class)
-            .register(TileResources.class)
-            .register(ClassPathResources.class)
+            .register(TileResource.class)
+            .register(StyleResource.class)
+            .register(TilesetResource.class)
+            .register(ClassPathResource.class)
             .register(newContextResolver(objectMapper))
             .register(new AbstractBinder() {
               @Override
diff --git a/baremaps-server/src/main/java/org/apache/baremaps/server/ChangeResource.java b/baremaps-server/src/main/java/org/apache/baremaps/server/ChangeResource.java
new file mode 100644
index 00000000..183ff19c
--- /dev/null
+++ b/baremaps-server/src/main/java/org/apache/baremaps/server/ChangeResource.java
@@ -0,0 +1,112 @@
+/*
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
+ * in compliance with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.baremaps.server;
+
+
+import static java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import java.nio.file.*;
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.inject.Singleton;
+import javax.ws.rs.GET;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.sse.OutboundSseEvent;
+import javax.ws.rs.sse.Sse;
+import javax.ws.rs.sse.SseBroadcaster;
+import javax.ws.rs.sse.SseEventSink;
+import org.apache.baremaps.config.ConfigReader;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Singleton
+@javax.ws.rs.Path("/")
+public class ChangeResource {
+
+  private static final Logger logger = LoggerFactory.getLogger(ChangeResource.class);
+
+  private final ConfigReader configReader = new ConfigReader();
+
+  private final ObjectMapper objectMapper = new ObjectMapper();
+
+  private final Path tileset;
+
+  private final Path style;
+
+  private final SseBroadcaster sseBroadcaster;
+
+  private final OutboundSseEvent.Builder sseEventBuilder;
+
+  @Inject
+  public ChangeResource(
+      @Named("tileset") Path tileset,
+      @Named("style") Path style,
+      Sse sse) {
+    this.tileset = tileset;
+    this.style = style;
+    this.sseBroadcaster = sse.newBroadcaster();
+    this.sseEventBuilder = sse.newEventBuilder();
+    var changeListener = new ChangeListener();
+    new Thread(changeListener).start();
+  }
+
+  @GET
+  @javax.ws.rs.Path("changes")
+  @Produces("text/event-stream")
+  public void changes(@Context SseEventSink sseEventSink) {
+    sseBroadcaster.register(sseEventSink);
+  }
+
+  public class ChangeListener implements Runnable {
+
+    @Override
+    public void run() {
+      try (WatchService watchService = FileSystems.getDefault().newWatchService()) {
+        if (tileset != null && Files.exists(tileset)) {
+          tileset.toAbsolutePath().getParent().register(watchService, ENTRY_MODIFY);
+        }
+        if (style != null && Files.exists(style)) {
+          style.toAbsolutePath().getParent().register(watchService, ENTRY_MODIFY);
+        }
+        WatchKey key;
+        while ((key = watchService.take()) != null) {
+          Path dir = (Path) key.watchable();
+
+          for (WatchEvent<?> event : key.pollEvents()) {
+            Path path = dir.resolve((Path) event.context()).toAbsolutePath();
+            logger.info("Change detected in {}", path);
+
+            if (style != null) {
+              var value = configReader.read(style);
+              var styleObjectNode = objectMapper.readValue(value, ObjectNode.class);
+
+              // reload the page if changes affected the tileset
+              if (tileset != null && path.endsWith(tileset.getFileName())) {
+                styleObjectNode.put("reload", true);
+              }
+
+              // broadcast the changes
+              sseBroadcaster.broadcast(sseEventBuilder.data(styleObjectNode.toString()).build());
+            }
+          }
+          key.reset();
+        }
+      } catch (Exception e) {
+        logger.error("Error while watching for changes", e);
+      }
+    }
+  }
+}
diff --git a/baremaps-server/src/main/java/org/apache/baremaps/server/ClassPathResources.java b/baremaps-server/src/main/java/org/apache/baremaps/server/ClassPathResource.java
similarity index 96%
rename from baremaps-server/src/main/java/org/apache/baremaps/server/ClassPathResources.java
rename to baremaps-server/src/main/java/org/apache/baremaps/server/ClassPathResource.java
index f89f9460..daf6408e 100644
--- a/baremaps-server/src/main/java/org/apache/baremaps/server/ClassPathResources.java
+++ b/baremaps-server/src/main/java/org/apache/baremaps/server/ClassPathResource.java
@@ -26,7 +26,7 @@ import javax.ws.rs.core.Response;
  */
 @Singleton
 @javax.ws.rs.Path("/")
-public class ClassPathResources {
+public class ClassPathResource {
 
   private final String directory;
 
@@ -39,7 +39,7 @@ public class ClassPathResources {
    * @param index the index
    */
   @Inject
-  public ClassPathResources(
+  public ClassPathResource(
       @Named("directory") String directory,
       @Named("index") String index) {
     this.directory = directory;
diff --git a/baremaps-server/src/main/java/org/apache/baremaps/server/DirectoryWatcher.java b/baremaps-server/src/main/java/org/apache/baremaps/server/DirectoryWatcher.java
deleted file mode 100644
index d83caae8..00000000
--- a/baremaps-server/src/main/java/org/apache/baremaps/server/DirectoryWatcher.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package org.apache.baremaps.server;
-
-import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;
-import static java.nio.file.StandardWatchEventKinds.ENTRY_DELETE;
-import static java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY;
-
-import java.io.IOException;
-import java.nio.file.FileSystems;
-import java.nio.file.Path;
-import java.nio.file.WatchEvent;
-import java.nio.file.WatchKey;
-import java.nio.file.WatchService;
-import java.util.Set;
-import java.util.function.Consumer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class DirectoryWatcher implements Runnable {
-
-  private static final Logger logger = LoggerFactory.getLogger(DirectoryWatcher.class);
-
-  private final Set<Path> directories;
-
-  private final Consumer<Path> consumer;
-
-  public DirectoryWatcher(Set<Path> directories, Consumer<Path> consumer) {
-    this.directories = directories;
-    this.consumer = consumer;
-  }
-
-  @Override
-  public void run() {
-    try (WatchService watchService = FileSystems.getDefault().newWatchService()) {
-      for (Path directory : directories) {
-        directory.register(watchService, ENTRY_MODIFY, ENTRY_CREATE, ENTRY_DELETE);
-      }
-      WatchKey key;
-      while ((key = watchService.take()) != null) {
-        Path dir = (Path) key.watchable();
-        for (WatchEvent<?> event : key.pollEvents()) {
-          Path path = dir.resolve((Path) event.context()).toAbsolutePath();
-          logger.info("Change detected in {}", path);
-          consumer.accept(path);
-        }
-        key.reset();
-      }
-    } catch (InterruptedException | IOException e) {
-      logger.error(e.getMessage());
-      Thread.currentThread().interrupt();
-    }
-  }
-}
diff --git a/baremaps-server/src/main/java/org/apache/baremaps/server/GeocoderResources.java b/baremaps-server/src/main/java/org/apache/baremaps/server/GeocoderResource.java
similarity index 97%
rename from baremaps-server/src/main/java/org/apache/baremaps/server/GeocoderResources.java
rename to baremaps-server/src/main/java/org/apache/baremaps/server/GeocoderResource.java
index 390b115a..b28ad224 100644
--- a/baremaps-server/src/main/java/org/apache/baremaps/server/GeocoderResources.java
+++ b/baremaps-server/src/main/java/org/apache/baremaps/server/GeocoderResource.java
@@ -34,7 +34,7 @@ import org.apache.lucene.search.SearcherManager;
 
 @Singleton
 @javax.ws.rs.Path("/")
-public class GeocoderResources {
+public class GeocoderResource {
 
   record GeocoderResponse(List<GeocoderResult> results) {
   }
@@ -47,7 +47,7 @@ public class GeocoderResources {
   private final SearcherManager searcherManager;
 
   @Inject
-  public GeocoderResources(SearcherManager searcherManager) {
+  public GeocoderResource(SearcherManager searcherManager) {
     this.searcherManager = searcherManager;
   }
 
diff --git a/baremaps-server/src/main/java/org/apache/baremaps/server/IpLocResources.java b/baremaps-server/src/main/java/org/apache/baremaps/server/IpLocResource.java
similarity index 96%
rename from baremaps-server/src/main/java/org/apache/baremaps/server/IpLocResources.java
rename to baremaps-server/src/main/java/org/apache/baremaps/server/IpLocResource.java
index 6da3e697..c06e7c2f 100644
--- a/baremaps-server/src/main/java/org/apache/baremaps/server/IpLocResources.java
+++ b/baremaps-server/src/main/java/org/apache/baremaps/server/IpLocResource.java
@@ -36,14 +36,14 @@ import org.slf4j.LoggerFactory;
 
 @Singleton
 @javax.ws.rs.Path("/")
-public class IpLocResources {
+public class IpLocResource {
 
-  private static final Logger logger = LoggerFactory.getLogger(DirectoryWatcher.class);
+  private static final Logger logger = LoggerFactory.getLogger(IpLocResource.class);
 
   private final IpLocRepository ipLocRepository;
 
   @Inject
-  public IpLocResources(IpLocRepository ipLocRepository) {
+  public IpLocResource(IpLocRepository ipLocRepository) {
     this.ipLocRepository = ipLocRepository;
   }
 
diff --git a/baremaps-server/src/main/java/org/apache/baremaps/server/StyleRessources.java b/baremaps-server/src/main/java/org/apache/baremaps/server/StyleResource.java
similarity index 92%
rename from baremaps-server/src/main/java/org/apache/baremaps/server/StyleRessources.java
rename to baremaps-server/src/main/java/org/apache/baremaps/server/StyleResource.java
index 7fc0f303..4df95c99 100644
--- a/baremaps-server/src/main/java/org/apache/baremaps/server/StyleRessources.java
+++ b/baremaps-server/src/main/java/org/apache/baremaps/server/StyleResource.java
@@ -22,12 +22,12 @@ import org.apache.baremaps.vectortile.style.Style;
 
 @Singleton
 @javax.ws.rs.Path("/")
-public class StyleRessources {
+public class StyleResource {
 
   private final Supplier<Style> styleSupplier;
 
   @Inject
-  public StyleRessources(Supplier<Style> styleSupplier) {
+  public StyleResource(Supplier<Style> styleSupplier) {
     this.styleSupplier = styleSupplier;
   }
 
diff --git a/baremaps-server/src/main/java/org/apache/baremaps/server/TileResources.java b/baremaps-server/src/main/java/org/apache/baremaps/server/TileResource.java
similarity index 95%
rename from baremaps-server/src/main/java/org/apache/baremaps/server/TileResources.java
rename to baremaps-server/src/main/java/org/apache/baremaps/server/TileResource.java
index e990e7c9..eb5743e3 100644
--- a/baremaps-server/src/main/java/org/apache/baremaps/server/TileResources.java
+++ b/baremaps-server/src/main/java/org/apache/baremaps/server/TileResource.java
@@ -27,7 +27,7 @@ import org.apache.baremaps.tilestore.TileStoreException;
 
 @Singleton
 @javax.ws.rs.Path("/")
-public class TileResources {
+public class TileResource {
 
   public static final String TILE_ENCODING = "gzip";
 
@@ -36,7 +36,7 @@ public class TileResources {
   private final Supplier<TileStore> tileStoreSupplier;
 
   @Inject
-  public TileResources(Supplier<TileStore> tileStoreSupplier) {
+  public TileResource(Supplier<TileStore> tileStoreSupplier) {
     this.tileStoreSupplier = tileStoreSupplier;
   }
 
diff --git a/baremaps-server/src/main/java/org/apache/baremaps/server/TilesetRessources.java b/baremaps-server/src/main/java/org/apache/baremaps/server/TilesetResource.java
similarity index 91%
rename from baremaps-server/src/main/java/org/apache/baremaps/server/TilesetRessources.java
rename to baremaps-server/src/main/java/org/apache/baremaps/server/TilesetResource.java
index 1ff41670..2981689d 100644
--- a/baremaps-server/src/main/java/org/apache/baremaps/server/TilesetRessources.java
+++ b/baremaps-server/src/main/java/org/apache/baremaps/server/TilesetResource.java
@@ -22,12 +22,12 @@ import org.apache.baremaps.vectortile.tilejson.TileJSON;
 
 @Singleton
 @javax.ws.rs.Path("/")
-public class TilesetRessources {
+public class TilesetResource {
 
   private final Supplier<TileJSON> tileJSONSupplier;
 
   @Inject
-  public TilesetRessources(Supplier<TileJSON> tileJSONSupplier) {
+  public TilesetResource(Supplier<TileJSON> tileJSONSupplier) {
     this.tileJSONSupplier = tileJSONSupplier;
   }
 
diff --git a/baremaps-server/src/main/java/org/apache/baremaps/server/ViewerResources.java b/baremaps-server/src/main/java/org/apache/baremaps/server/ViewerResources.java
deleted file mode 100644
index 942e9f9f..00000000
--- a/baremaps-server/src/main/java/org/apache/baremaps/server/ViewerResources.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
- * in compliance with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
- * or implied. See the License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package org.apache.baremaps.server;
-
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import java.io.IOException;
-import java.nio.file.Path;
-import java.util.Arrays;
-import java.util.HashSet;
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Singleton;
-import javax.ws.rs.GET;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.Context;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.sse.OutboundSseEvent;
-import javax.ws.rs.sse.Sse;
-import javax.ws.rs.sse.SseBroadcaster;
-import javax.ws.rs.sse.SseEventSink;
-import org.apache.baremaps.config.ConfigReader;
-import org.apache.baremaps.vectortile.style.Style;
-import org.apache.baremaps.vectortile.tilejson.TileJSON;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@Singleton
-@javax.ws.rs.Path("/")
-public class ViewerResources {
-
-  private static final Logger logger = LoggerFactory.getLogger(ViewerResources.class);
-
-  private final ConfigReader configReader = new ConfigReader();
-
-  private final Path style;
-
-  private final Path tileset;
-
-  private final ObjectMapper objectMapper;
-
-  private final SseBroadcaster sseBroadcaster;
-
-  private final OutboundSseEvent.Builder sseEventBuilder;
-
-  @Inject
-  public ViewerResources(
-      @Named("tileset") Path tileset,
-      @Named("style") Path style,
-      ObjectMapper objectMapper,
-      Sse sse) {
-    this.tileset = tileset.toAbsolutePath();
-    this.style = style.toAbsolutePath();
-    this.objectMapper = objectMapper;
-    this.sseBroadcaster = sse.newBroadcaster();
-    this.sseEventBuilder = sse.newEventBuilder();
-
-    // Observe the file system for changes
-    var directories = new HashSet<>(Arrays.asList(tileset.getParent(), style.getParent()));
-    new Thread(new DirectoryWatcher(directories, this::broadcastChanges)).start();
-  }
-
-  public void broadcastChanges(Path path) {
-    try {
-      var value = configReader.read(style);
-      var styleObjectNode = objectMapper.readValue(value, ObjectNode.class);
-
-      // reload the page if changes affected the tileset
-      styleObjectNode.put("reload", path.endsWith(tileset.getFileName()));
-
-      // broadcast the changes
-      sseBroadcaster.broadcast(sseEventBuilder.data(styleObjectNode.toString()).build());
-    } catch (IOException e) {
-      logger.error("Unable to broadcast change", e);
-    }
-  }
-
-  @GET
-  @javax.ws.rs.Path("changes")
-  @Produces("text/event-stream")
-  public void changes(@Context SseEventSink sseEventSink) {
-    sseBroadcaster.register(sseEventSink);
-  }
-}