private CompletableFuture<Optional<Object>> send(final Event event) { List<MediaType> produces = event.type().<List<MediaType>>map(ImmutableList::of) .orElse(this.produces); SseRenderer ctx = new SseRenderer(renderers, produces, StandardCharsets.UTF_8, locale, locals); return Try.apply(() -> { byte[] bytes = ctx.format(event); return send(event.id(), bytes); }).recover(x -> { CompletableFuture<Optional<Object>> future = new CompletableFuture<>(); future.completeExceptionally(x); return future; }) .get(); }
public byte[] format(final Sse.Event event) throws Exception { // comment? data = event.comment() .map(comment -> ByteSource.concat(COMMENT, bytes(comment), NL)) .orElse(ByteSource.empty()); // id? data = event.id() .map(id -> ByteSource.concat(data, ID, bytes(id.toString()), NL)) .orElse(data); // event? data = event.name() .map(name -> ByteSource.concat(data, EVENT, bytes(name), NL)) .orElse(data); // retry? data = event.retry() .map(retry -> ByteSource.concat(data, RETRY, bytes(Long.toString(retry)), NL)) .orElse(data); Optional<Object> value = event.data(); if (value.isPresent()) { render(value.get()); } data = ByteSource.concat(data, NL); byte[] bytes = data.read(); data = null; return bytes; }
private CompletableFuture<Optional<Object>> send(final Event event) { List<MediaType> produces = event.type().<List<MediaType>>map(ImmutableList::of) .orElse(this.produces); SseRenderer ctx = new SseRenderer(renderers, produces, StandardCharsets.UTF_8, locale, locals); return Try.apply(() -> { byte[] bytes = ctx.format(event); return send(event.id(), bytes); }).recover(x -> { CompletableFuture<Optional<Object>> future = new CompletableFuture<>(); future.completeExceptionally(x); return future; }) .get(); }
public byte[] format(final Sse.Event event) throws Exception { // comment? data = event.comment() .map(comment -> ByteSource.concat(COMMENT, bytes(comment), NL)) .orElse(ByteSource.empty()); // id? data = event.id() .map(id -> ByteSource.concat(data, ID, bytes(id.toString()), NL)) .orElse(data); // event? data = event.name() .map(name -> ByteSource.concat(data, EVENT, bytes(name), NL)) .orElse(data); // retry? data = event.retry() .map(retry -> ByteSource.concat(data, RETRY, bytes(Long.toString(retry)), NL)) .orElse(data); Optional<Object> value = event.data(); if (value.isPresent()) { render(value.get()); } data = ByteSource.concat(data, NL); byte[] bytes = data.read(); data = null; return bytes; }