-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathSubscribeSseService.java
More file actions
42 lines (32 loc) · 1.5 KB
/
SubscribeSseService.java
File metadata and controls
42 lines (32 loc) · 1.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package clap.server.application.service.webhook;
import clap.server.application.port.inbound.notification.SubscribeSseUsecase;
import clap.server.application.port.outbound.notification.CommandSsePort;
import clap.server.common.annotation.architecture.ApplicationService;
import clap.server.exception.ApplicationException;
import clap.server.exception.code.NotificationErrorCode;
import lombok.RequiredArgsConstructor;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
@Deprecated
@ApplicationService
@RequiredArgsConstructor
public class SubscribeSseService implements SubscribeSseUsecase {
private final CommandSsePort commandSsePort;
// SSE 연결 지속 시간
private static final Long DEFAULT_TIMEOUT = 60L * 1000 * 60;
@Override
public SseEmitter subscribe(Long memberId) {
SseEmitter emitter = new SseEmitter(DEFAULT_TIMEOUT);
commandSsePort.save(memberId, emitter);
// SSE가 작업을 완료하거나 종료되었을때 emitterRepository에서 해당 연결 값 삭제
emitter.onCompletion(() -> commandSsePort.delete(memberId));
emitter.onTimeout(() -> commandSsePort.delete(memberId));
try {
emitter.send(SseEmitter.event()
.id(String.valueOf(memberId))
.data("Sse 연결 성공. [memberId = " + memberId + "]"));
} catch (Exception e) {
throw new ApplicationException(NotificationErrorCode.SSE_SEND_FAILED);
}
return emitter;
}
}