Skip to content

Commit

Permalink
feat: 커넥션 연결 시 타이머 상태 알림
Browse files Browse the repository at this point in the history
  • Loading branch information
yechop committed Jan 7, 2025
1 parent 3bf8326 commit e56009d
Show file tree
Hide file tree
Showing 5 changed files with 22 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.support.PeriodicTrigger;
import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketSession;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
Expand Down Expand Up @@ -87,4 +88,10 @@ private void stop(final String key, final Timer timer) {
final Timer initalTimer = new Timer(timer.getAccessCode(), timer.getDuration(), timer.getDuration());
timestampRegistry.register(key, initalTimer);
}

public void notifyTimerStatus(final WebSocketSession session, final String pairRoomAccessCode) {
if (schedulerRegistry.isActive(pairRoomAccessCode)) {
pairRoomWebSocketService.sendPairRoomSession(session, new EventAndDataMessage("timer", "running"));
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ public class PairRoomWebSocketService {
private final PairRoomWebSocketSessionStore pairRoomWebSocketSessionStore;
private final WebSocketSender prodWebSocketSender;

public void sendPairRoomSession(final WebSocketSession session, final WebSocketMessage message) {
prodWebSocketSender.sendMessage(session, message);
}

public void sendAllPairRoomSessions(final String pairRoomAccessCode, final WebSocketMessage message) {
final Set<WebSocketSession> sessions = pairRoomWebSocketSessionStore.getSessions(pairRoomAccessCode);
prodWebSocketSender.sendMessage(sessions, message);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,7 @@ public class ProdWebSocketSender implements WebSocketSender {
private final ObjectMapper objectMapper;

@Override
public void sendMessage(final Set<WebSocketSession> sessions, final WebSocketMessage message) {
sessions.parallelStream().forEach(session -> sendMessage(session, message));
}

private void sendMessage(final WebSocketSession session, final WebSocketMessage message) {
public void sendMessage(final WebSocketSession session, final WebSocketMessage message) {
try {
final TextMessage webSocketMessage = new TextMessage(objectMapper.writeValueAsString(message));
if (session.isOpen()) {
Expand All @@ -34,4 +30,9 @@ private void sendMessage(final WebSocketSession session, final WebSocketMessage
log.error(e.getMessage(), e);
}
}

@Override
public void sendMessage(final Set<WebSocketSession> sessions, final WebSocketMessage message) {
sessions.parallelStream().forEach(session -> sendMessage(session, message));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,21 @@

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import site.coduo.sync.service.SchedulerService;

@Slf4j
@RequiredArgsConstructor
@Component
public class WebSocketHandler extends TextWebSocketHandler {

private final PairRoomWebSocketSessionStore pairRoomWebSocketSessionStore;
private final SchedulerService schedulerService;

@Override
public void afterConnectionEstablished(final WebSocketSession session) {
final String pairRoomAccessCode = parsePairRoomAccessCode(session);
pairRoomWebSocketSessionStore.addSession(pairRoomAccessCode, session);
schedulerService.notifyTimerStatus(session, pairRoomAccessCode);
log.info("연결 성공 : {}", session.getId());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,7 @@

public interface WebSocketSender {

void sendMessage(final WebSocketSession session, final WebSocketMessage message);

void sendMessage(final Set<WebSocketSession> sessions, final WebSocketMessage message);
}

0 comments on commit e56009d

Please sign in to comment.