package org.asamk.signal.http;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.nio.charset.StandardCharsets;
import java.util.List;
/**
* This class send Server-sent events payload to an OutputStream.
* See spec
*/
public class ServerSentEventSender {
private final BufferedWriter writer;
public ServerSentEventSender(final OutputStream outputStream) {
this.writer = new BufferedWriter(new OutputStreamWriter(outputStream, StandardCharsets.UTF_8));
}
/**
* @param id Event id
* @param event Event type
* @param data Event data, each entry must not contain newline chars.
*/
public synchronized void sendEvent(String id, String event, List data) throws IOException {
if (id != null) {
writer.write("id:");
writer.write(id);
writer.write("\n");
}
if (event != null) {
writer.write("event:");
writer.write(event);
writer.write("\n");
}
if (data.isEmpty()) {
writer.write("data\n");
} else {
for (final var d : data) {
writer.write("data:");
writer.write(d);
writer.write("\n");
}
}
writer.write("\n");
writer.flush();
}
public synchronized void sendKeepAlive() throws IOException {
writer.write(":\n");
writer.flush();
}
}