Untitled
unknown
plain_text
2 months ago
1.9 kB
4
Indexable
package com.hdfc.epi.lib.service; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import java.io.IOException; import java.util.concurrent.ConcurrentHashMap; @Slf4j @Service public class SSEService { private final ConcurrentHashMap<String, SseEmitter> map = new ConcurrentHashMap<>(); public SseEmitter handler(String ulId) { return map.computeIfAbsent(ulId, id -> { SseEmitter sseEmitter = new SseEmitter(Long.MAX_VALUE); sseEmitter.onCompletion(() -> removeEmitter(id)); sseEmitter.onTimeout(() -> removeEmitter(id)); sseEmitter.onError(e -> { log.error("Error in emitter {} -> {}", id, e.getMessage()); removeEmitter(id); }); log.info("Created new SSE emitter for {}", id); return sseEmitter; }); } public void publishToEmitter(String ulId, String response) { SseEmitter sseEmitter = map.get(ulId); if (sseEmitter != null) { log.info("Sending event to emitter: {}", ulId); try { sseEmitter.send(SseEmitter.event().data(response)); log.info("Successfully published data to emitter {}: {}", ulId, response); } catch (IOException e) { log.error("Failed to send event to emitter {}: {}", ulId, e.getMessage()); } finally { removeEmitter(ulId); } } else { log.warn("Emitter not found for {}", ulId); } } private void removeEmitter(String ulId) { SseEmitter sseEmitter = map.remove(ulId); if (sseEmitter != null) { sseEmitter.complete(); log.info("Emitter {} removed", ulId); } } }
Editor is loading...
Leave a Comment