List<SSEvent> events = new ArrayList<SSEvent>();
StringBuilder commentLines = new StringBuilder(32);
StringBuilder dataLines = new StringBuilder(32);
SSEvent event = null;
String content = new String(contentAsByteArray, ExtDirectSpringUtil.UTF8_CHARSET);
for (String line : content.split("\\n")) {
if (line.isEmpty() && event != null) {
if (dataLines.length() > 0) {
event.setData(dataLines.toString());
}
if (commentLines.length() > 0) {
event.setComment(commentLines.toString());
}
events.add(event);
event = null;
commentLines = new StringBuilder(32);
dataLines = new StringBuilder(32);
continue;
}
else if (event == null) {
event = new SSEvent();
}
if (line.startsWith(":")) {
if (commentLines.length() > 0) {
commentLines.append("\n");
}
commentLines.append(line.substring(1).trim());
}
else if (line.startsWith("data:")) {
if (dataLines.length() > 0) {
dataLines.append("\n");
}
dataLines.append(line.substring(5).trim());
}
else if (line.startsWith("retry:")) {
event.setRetry(Integer.valueOf(line.substring(6).trim()));
}
else if (line.startsWith("event:")) {
event.setEvent(line.substring(6).trim());
}
else if (line.startsWith("id:")) {
event.setId(line.substring(3).trim());
}
}
if (event != null) {
if (dataLines.length() > 0) {
event.setData(dataLines.toString());
}
if (commentLines.length() > 0) {
event.setComment(commentLines.toString());
}
events.add(event);
}
return events;