]> nmode's Git Repositories - signal-cli/blob - src/main/java/org/asamk/signal/http/ServerSentEventSender.java
Check if required quote-author parameter is missing
[signal-cli] / src / main / java / org / asamk / signal / http / ServerSentEventSender.java
1 package org.asamk.signal.http;
2
3 import java.io.BufferedWriter;
4 import java.io.IOException;
5 import java.io.OutputStream;
6 import java.io.OutputStreamWriter;
7 import java.nio.charset.StandardCharsets;
8 import java.util.List;
9
10 /**
11 * This class send Server-sent events payload to an OutputStream.
12 * See <a href="https://html.spec.whatwg.org/multipage/server-sent-events.html">spec</a>
13 */
14 public class ServerSentEventSender {
15
16 private final BufferedWriter writer;
17
18 public ServerSentEventSender(final OutputStream outputStream) {
19 this.writer = new BufferedWriter(new OutputStreamWriter(outputStream, StandardCharsets.UTF_8));
20 }
21
22 /**
23 * @param id Event id
24 * @param event Event type
25 * @param data Event data, each entry must not contain newline chars.
26 */
27 public synchronized void sendEvent(String id, String event, List<String> data) throws IOException {
28 if (id != null) {
29 writer.write("id:");
30 writer.write(id);
31 writer.write("\n");
32 }
33 if (event != null) {
34 writer.write("event:");
35 writer.write(event);
36 writer.write("\n");
37 }
38 if (data.isEmpty()) {
39 writer.write("data\n");
40 } else {
41 for (final var d : data) {
42 writer.write("data:");
43 writer.write(d);
44 writer.write("\n");
45 }
46 }
47 writer.write("\n");
48 writer.flush();
49 }
50
51 public synchronized void sendKeepAlive() throws IOException {
52 writer.write(":\n");
53 writer.flush();
54 }
55 }