@Override
public ByteBuf apply(ServerSentEvent serverSentEvent) throws Exception {
ByteBuf buffer = bufferAllocator.buffer();
OutputStream outputStream = new ByteBufWriteThroughOutputStream(buffer);
Writer writer = new OutputStreamWriter(outputStream, UTF_8);
String eventType = serverSentEvent.getEventType();
if (eventType != null) {
outputStream.write(EVENT_TYPE_PREFIX);
writer.append(eventType).flush();
outputStream.write(NEWLINE);
}
String eventData = serverSentEvent.getEventData();
if (eventData != null) {
outputStream.write(EVENT_DATA_PREFIX);
for (Character character : Lists.charactersOf(eventData)) {
if (character == '\n') {
outputStream.write(NEWLINE);
outputStream.write(EVENT_DATA_PREFIX);
} else {
writer.append(character).flush();
}
}
outputStream.write(NEWLINE);
}
String eventId = serverSentEvent.getEventId();
if (eventId != null) {
outputStream.write(EVENT_ID_PREFIX);
writer.append(eventId).flush();
outputStream.write(NEWLINE);
}
outputStream.write(NEWLINE);
writer.flush();
writer.close();
return buffer;
}