Skip to content

Commit

Permalink
fix: 실시간 크루 알람, 게임 알람 메시지가 오지 않는 에러 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
jay-so committed Nov 29, 2023
1 parent c8b9b98 commit 42ba67e
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;

import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;

Expand All @@ -28,6 +29,11 @@ public void saveEventCache(final String eventCacheId, final Object event) {
fallbackEmitters.put(Long.parseLong(eventCacheId), event);
}

@Override
public Optional<SseEmitter> findById(final Long emitterId) {
return Optional.ofNullable(emitters.get(emitterId));
}

@Override
public void deleteEventCache(final String eventCacheId) {
fallbackEmitters.remove(Long.parseLong(eventCacheId));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,16 @@
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;

import java.util.Map;
import java.util.Optional;

public interface SseEmitterRepository {

SseEmitter save(final String emitterId, final SseEmitter sseEmitter);

void saveEventCache(final String eventCacheId, final Object event);

Optional<SseEmitter> findById(final Long emitterId);

void deleteEventCache(final String eventCacheId);

Map<Long, Object> findAllEventCacheStartWithByMemberId(final Long memberId);
Expand Down
22 changes: 13 additions & 9 deletions src/main/java/kr/pickple/back/alarm/service/SseEmitterService.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

import java.io.IOException;
import java.util.Map;
import java.util.Optional;

@Slf4j
@Service
Expand Down Expand Up @@ -53,15 +54,18 @@ public void sendCachedEventToUser(final Long memberId, final SseEmitter emitter)
}

public <T> void sendAlarm(final Long memberId, final T responseDto) {
final SseEmitter emitter = subscribeToSse(memberId);
final Optional<SseEmitter> optionalEmitter = sseEmitterRepository.findById(memberId);

try {
emitter.send(SseEmitter.event().name("AlarmEvent").data(responseDto));
sseEmitterRepository.deleteEventCache(String.valueOf(memberId));
} catch (Exception e) {
sseEmitterRepository.saveEventCache(String.valueOf(memberId), responseDto);
sseEmitterRepository.deleteById(memberId);
log.error("알람 전송 중 오류가 발생했습니다. memberId: {}", memberId, e);
}
optionalEmitter.ifPresentOrElse(emitter -> {
try {
emitter.send(SseEmitter.event().name("AlarmEvent").data(responseDto));
sseEmitterRepository.deleteEventCache(String.valueOf(memberId));
} catch (Exception e) {
sseEmitterRepository.saveEventCache(String.valueOf(memberId), responseDto);
log.error("알람 전송 중 오류가 발생했습니다. memberId: {}", memberId, e);
}
}, () -> {
log.error("해당 memberId에 대한 SseEmitter를 찾을 수 없습니다. memberId: {}", memberId);
});
}
}

0 comments on commit 42ba67e

Please sign in to comment.