+ private List<Pair<Manager, Manager.ReceiveMessageHandler>> subscribeReceiveHandlers(
+ final List<Manager> managers, final ServerSentEventSender sender, Callable unsubscribe
+ ) {
+ return managers.stream().map(m1 -> {
+ final var receiveMessageHandler = new JsonReceiveMessageHandler(m1, s -> {
+ try {
+ sender.sendEvent(null, "receive", List.of(objectMapper.writeValueAsString(s)));
+ } catch (IOException e) {
+ unsubscribe.call();
+ }
+ });
+ m1.addReceiveHandler(receiveMessageHandler);
+ return new Pair<>(m1, (Manager.ReceiveMessageHandler) receiveMessageHandler);
+ }).toList();
+ }
+
+ private void unsubscribeReceiveHandler(final Pair<Manager, Manager.ReceiveMessageHandler> pair) {
+ final var m = pair.first();
+ final var handler = pair.second();
+ m.removeReceiveHandler(handler);