in server/src/main/java/com/epam/aidial/core/server/util/EventStreamParser.java [56:90]
public synchronized Future<Boolean> parse(Buffer chunk) {
if (lastChunk) {
return Future.succeededFuture(true);
}
chunkIndex = 0;
futures = null;
if (firstChunk) {
chunkIndex += skipBom(chunk);
firstChunk = false;
stage = Stages.EVENT;
}
try {
while (chunkIndex < chunk.length()) {
switch (stage) {
case EVENT -> handleEventStage(chunk);
case DATA -> handleDataStage(chunk);
case EOL -> handleEndOfLineStage(chunk);
default -> throw new IllegalStateException("unknown stage + " + stage);
}
if (lastChunk) {
break;
}
}
} catch (Throwable e) {
log.error("Error occurred at parsing chunk", e);
return Future.failedFuture(e);
}
if (futures == null) {
return Future.succeededFuture(lastChunk);
}
boolean localLastChunk = lastChunk;
return Future.join(futures).transform(ignore -> Future.succeededFuture(localLastChunk));
}