private void handleEvent(ReportingEvent event, long sequence, boolean endOfBatch) { if (event.getType() == null) { return; } else if (event.getType() == ReportingEvent.ReportingEventType.FLUSH) { flush(); return; } else if (event.getType() == ReportingEvent.ReportingEventType.SHUTDOWN) { shutDown = true; flush(); return; } processorEventHandler.onEvent(event, sequence, endOfBatch); try { if (connection == null) { connection = startRequest(); payloadSerializer.serializeMetaDataNdJson(metaData); } writeEvent(event); } catch (Exception e) { logger.error("Failed to handle event of type {} with this error: {}", event.getType(), e.getMessage()); logger.debug("Event handling failure", e); flush(); onConnectionError(null, currentlyTransmitting + 1, 0); } if (shouldFlush()) { flush(); } }