Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refactor #99

Open
wants to merge 27 commits into
base: dev
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
899e3d8
log: 임시 로그 추가
yeonise May 11, 2024
30178a2
Merge branch 'refs/heads/dev' into release
yeonise May 14, 2024
ce6fdfd
Merge remote-tracking branch 'refs/remotes/origin/dev' into release
yeonise May 15, 2024
48bc40c
Merge pull request #85 from mujik-tigers/dev
yeonise May 15, 2024
b05c7fd
Merge pull request #90 from mujik-tigers/dev
ghkdgus29 May 17, 2024
70b617d
Merge branch 'dev' into release
ghkdgus29 May 17, 2024
c049df4
Merge branch 'dev' into release
ghkdgus29 May 17, 2024
f6a6cea
Merge branch 'dev' into release
ghkdgus29 May 17, 2024
cf0c555
Merge pull request #91 from mujik-tigers/dev
ghkdgus29 May 18, 2024
8fefd7d
Merge branch 'refs/heads/dev' into release
yeonise May 19, 2024
a75ec6e
Merge branch 'dev' into release
ghkdgus29 May 19, 2024
85a9cca
Merge remote-tracking branch 'refs/remotes/origin/dev' into release
yeonise May 21, 2024
d014049
chore: cors 허용 호스트 추가
ghkdgus29 May 23, 2024
32a527c
chore: cors 소켓 허용 호스트 추가
ghkdgus29 May 23, 2024
ee417cb
Merge pull request #94 from mujik-tigers/dev
ghkdgus29 May 26, 2024
a5c3ed6
Merge branch 'dev' into release
ghkdgus29 May 30, 2024
32628f7
Merge remote-tracking branch 'refs/remotes/origin/dev' into release
yeonise Jun 4, 2024
f9912bc
Merge pull request #96 from mujik-tigers/dev
ghkdgus29 Jun 8, 2024
32f81d9
Merge pull request #97 from mujik-tigers/dev
ghkdgus29 Jun 10, 2024
38c3f1b
Merge remote-tracking branch 'refs/remotes/origin/dev' into release
yeonise Jun 11, 2024
d949d3f
Merge remote-tracking branch 'refs/remotes/origin/dev' into release
yeonise Jun 14, 2024
fdf0ee2
log: 방 검색 시 파라미터로 넘어온 키워드 로깅
ghkdgus29 Jun 27, 2024
1cd32cc
Revert "log: 방 검색 시 파라미터로 넘어온 키워드 로깅"
ghkdgus29 Jun 27, 2024
0be648f
Merge branch 'dev' into release
ghkdgus29 Jun 27, 2024
a5f2c60
Merge branch 'dev' into release
ghkdgus29 Jul 23, 2024
4fd781c
refactor: User Builder
yeonise Aug 21, 2024
208a041
refactor: 1차 리팩토링
yeonise Aug 31, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion src/main/java/site/youtogether/config/WebConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,11 @@ public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://localhost:3000", "https://you-together-web.vercel.app", "https://localhost:3001")
.allowedOrigins("http://localhost:3000",
"https://you-together-web.vercel.app",
"https://localhost:3001",
"https://you-together.site",
"https://www.you-together.site")
.allowedMethods("*")
.allowCredentials(true)
.exposedHeaders(HttpHeaders.AUTHORIZATION)
Expand Down
6 changes: 5 additions & 1 deletion src/main/java/site/youtogether/config/WebSocketConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,11 @@ public void configureMessageBroker(MessageBrokerRegistry registry) {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint(STOMP_ENDPOINT)
.setAllowedOriginPatterns("http://localhost:3000", "https://you-together-web.vercel.app", "https://localhost:3001")
.setAllowedOriginPatterns("http://localhost:3000",
"https://you-together-web.vercel.app",
"https://localhost:3001",
"https://you-together.site",
"https://www.you-together.site")
.addInterceptors(stompHandshakeInterceptor)
.withSockJS();
}
Expand Down
39 changes: 37 additions & 2 deletions src/main/java/site/youtogether/message/VideoSyncInfoMessage.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package site.youtogether.message;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.Setter;
import site.youtogether.playlist.PlayerState;
import site.youtogether.player.PlayingVideo;
import site.youtogether.player.handler.PlayerState;

@AllArgsConstructor
@AllArgsConstructor(access = AccessLevel.PACKAGE)
@Getter
public class VideoSyncInfoMessage {

Expand All @@ -19,4 +21,37 @@ public class VideoSyncInfoMessage {
private final double playerCurrentTime;
private final double playerRate;

public static VideoSyncInfoMessage ofPlay(PlayingVideo playingVideo, double currentTime) {
return new VideoSyncInfoMessage(
playingVideo.roomCode(),
playingVideo.number(),
playingVideo.id(),
PlayerState.PLAY,
currentTime,
playingVideo.rate()
);
}

public static VideoSyncInfoMessage ofPause(PlayingVideo playingVideo) {
return new VideoSyncInfoMessage(
playingVideo.roomCode(),
playingVideo.number(),
playingVideo.id(),
PlayerState.PAUSE,
playingVideo.startTime(),
playingVideo.rate()
);
}

public static VideoSyncInfoMessage ofEnd(PlayingVideo playingVideo) {
return new VideoSyncInfoMessage(
playingVideo.roomCode(),
playingVideo.number(),
playingVideo.id(),
PlayerState.END,
playingVideo.duration(),
playingVideo.rate()
);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
import site.youtogether.message.ChatMessage;
import site.youtogether.message.VideoSyncInfoMessage;
import site.youtogether.message.application.MessageService;
import site.youtogether.playlist.application.PlayingVideoService;
import site.youtogether.player.application.VideoPlayerService;
import site.youtogether.user.User;
import site.youtogether.user.infrastructure.UserStorage;
import site.youtogether.util.RandomUtil;
Expand All @@ -24,7 +24,7 @@ public class MessageController {

private final UserStorage userStorage;
private final MessageService messageService;
private final PlayingVideoService playingVideoService;
private final VideoPlayerService videoPlayerService;

@MessageMapping("/messages/chat")
public void handleChatMessage(ChatMessage chatMessage, SimpMessageHeaderAccessor headerAccessor) {
Expand Down Expand Up @@ -53,7 +53,7 @@ public void handleVideoSyncMessage(VideoSyncInfoMessage videoSyncInfoMessage, Si
}

videoSyncInfoMessage.setRoomCode(user.getCurrentRoomCode());
playingVideoService.manageVideo(videoSyncInfoMessage);
videoPlayerService.control(videoSyncInfoMessage);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ public void handleWebSocketSubscriberListener(SessionSubscribeEvent event) {
Long userId = (Long)headerAccessor.getSessionAttributes().get(USER_ID);
User user = userStorage.findById(userId)
.orElseThrow(UserNoExistenceException::new);
log.info("--USER {} 웹 소켓 구독 시작--", userId);
log.info("--USER {} ROOM {} 웹 소켓 구독 시작--", userId, roomCode);

messageService.sendParticipants(roomCode);
messageService.sendPlaylist(roomCode);
Expand All @@ -52,7 +52,7 @@ public void handleWebSocketDisconnectListener(SessionDisconnectEvent event) {
User user = userStorage.findById(userId)
.orElseThrow(UserNoExistenceException::new);

log.info("--USER {} 웹 소켓 커넥션 종료 시도--", userId);
log.info("--USER {} ROOM {} 웹 소켓 커넥션 종료 시도--", userId, roomCode);
roomService.leave(userId);
messageService.sendParticipants(roomCode);
}
Expand Down
47 changes: 47 additions & 0 deletions src/main/java/site/youtogether/player/PlayingVideo.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package site.youtogether.player;

import site.youtogether.playlist.Video;

public record PlayingVideo(
String roomCode,
String id,
Long number,
double startTime,
double rate,
double duration) {

private static final double ZERO_SECOND = 0.0;
private static final double DEFAULT_RATE = 1.0;

public static PlayingVideo updateStartTime(PlayingVideo playingVideo, double startTime) {
return new PlayingVideo(
playingVideo.roomCode(),
playingVideo.id(),
playingVideo.number(),
startTime,
playingVideo.rate(),
playingVideo.duration());
}

public static PlayingVideo updateRate(PlayingVideo playingVideo, double rate) {
return new PlayingVideo(
playingVideo.roomCode(),
playingVideo.id(),
playingVideo.number(),
playingVideo.startTime(),
rate,
playingVideo.duration());
}

public static PlayingVideo from(String roomCode, Video video) {
return new PlayingVideo(
roomCode,
video.id(),
video.number(),
ZERO_SECOND,
DEFAULT_RATE,
video.duration()
);
}

}
69 changes: 69 additions & 0 deletions src/main/java/site/youtogether/player/VideoPlayer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package site.youtogether.player;

import static site.youtogether.player.handler.PlayerState.*;

import java.util.Timer;

import site.youtogether.player.application.VideoSynchronizer;
import site.youtogether.player.handler.PlayerState;

public class VideoPlayer {

private final String roomCode;
private final VideoSynchronizer videoSynchronizer;
private final Timer timer;
private PlayerState state;
private PlayingVideo playingVideo;

public VideoPlayer(String roomCode, VideoSynchronizer videoSynchronizer) {
this.roomCode = roomCode;
this.videoSynchronizer = videoSynchronizer;
this.timer = new Timer();
this.state = END;
}

// 영상을 일시정지합니다
public void pauseVideo(PlayingVideo playingVideo) {
if (playingVideo == null)
return;

videoSynchronizer.pause(timer, playingVideo);
state = PAUSE;
}

// 영상을 재생합니다
public void playVideo(PlayingVideo playingVideo) {
switchVideo(playingVideo);
videoSynchronizer.play(timer, playingVideo);
state = PLAY;
}

public void stopVideo() {
if (playingVideo != null) {
videoSynchronizer.stop(timer, playingVideo);
state = END;
playingVideo = null;
}
}

public void switchVideo(PlayingVideo playingVideo) {
boolean wasPlaying = state == PLAY;
boolean isNewVideo = !this.playingVideo.number().equals(playingVideo.number());
// 재생 중인 영상이 있다면 우선 중지합니다
stopVideo();
this.playingVideo = playingVideo;

if (wasPlaying || isNewVideo) {
playVideo(playingVideo);
}
}

public String getRoomCode() {
return this.roomCode;
}

public PlayingVideo getPlayingVideo() {
return playingVideo;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package site.youtogether.player.application;

import java.util.TimerTask;

import site.youtogether.message.VideoSyncInfoMessage;
import site.youtogether.player.PlayingVideo;

public abstract class SynchronizerTask extends TimerTask {

private static final double EMPTY = 0.0;

private final PlayingVideo playingVideo;
private double currentTime;

public SynchronizerTask(PlayingVideo playingVideo) {
this.playingVideo = playingVideo;
this.currentTime = playingVideo.startTime();
}

public VideoSyncInfoMessage getSyncMessage() {
return VideoSyncInfoMessage.ofPlay(playingVideo, currentTime);
}

public boolean isLiveStream() {
return playingVideo.duration() == EMPTY;
}

public void incrementTime() {
++currentTime;
}

public double getCurrentTime() {
return currentTime;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package site.youtogether.player.application;

import org.springframework.stereotype.Service;

import lombok.RequiredArgsConstructor;
import site.youtogether.message.VideoSyncInfoMessage;
import site.youtogether.player.VideoPlayer;
import site.youtogether.player.handler.PlayerState;
import site.youtogether.player.infrastructure.VideoPlayerStorage;

@Service
@RequiredArgsConstructor
public class VideoPlayerService {

private final VideoPlayerStorage videoPlayerStorage;

public void control(VideoSyncInfoMessage message) {
VideoPlayer videoPlayer = videoPlayerStorage.findByRoomCode(message.getRoomCode());
PlayerState.handlerOf(message.getPlayerState()).handle(videoPlayer, message);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package site.youtogether.player.application;

import java.util.Timer;

import org.springframework.stereotype.Component;

import lombok.RequiredArgsConstructor;
import site.youtogether.message.VideoSyncInfoMessage;
import site.youtogether.message.application.MessageService;
import site.youtogether.player.PlayingVideo;

@Component
@RequiredArgsConstructor
public class VideoSynchronizer {

private static final long NO_DELAY = 0;
private static final long ONE_SECOND = 1_000;

private final MessageService messageService;

public void pause(Timer timer, PlayingVideo playingVideo) {
timer.cancel();

// 일시정지 메세지를 1회 전송합니다
messageService.sendVideoSyncInfo(VideoSyncInfoMessage.ofPause(playingVideo));
}

public void play(Timer timer, PlayingVideo playingVideo) {
// 1초마다 재생 메세지를 전송합니다
timer.scheduleAtFixedRate(new SynchronizerTask(playingVideo) {
@Override
public void run() {
if (this.isLiveStream() || this.getCurrentTime() < playingVideo.duration()) {
messageService.sendVideoSyncInfo(this.getSyncMessage());
}

this.incrementTime();
}
}, NO_DELAY, Math.round(ONE_SECOND / playingVideo.rate()));
}

public void stop(Timer timer, PlayingVideo playingVideo) {
timer.cancel();

// 종료 메세지를 1회 전송합니다
messageService.sendVideoSyncInfo(VideoSyncInfoMessage.ofEnd(playingVideo));
}

}
13 changes: 13 additions & 0 deletions src/main/java/site/youtogether/player/handler/EndStateHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package site.youtogether.player.handler;

import site.youtogether.message.VideoSyncInfoMessage;
import site.youtogether.player.VideoPlayer;

public class EndStateHandler implements PlayerStateHandler {

@Override
public void handle(VideoPlayer videoPlayer, VideoSyncInfoMessage message) {
videoPlayer.stopVideo();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package site.youtogether.player.handler;

import site.youtogether.message.VideoSyncInfoMessage;
import site.youtogether.player.PlayingVideo;
import site.youtogether.player.VideoPlayer;

public class PauseStateHandler implements PlayerStateHandler {

@Override
public void handle(VideoPlayer videoPlayer, VideoSyncInfoMessage message) {
PlayingVideo playingVideo = PlayingVideo.updateStartTime(videoPlayer.getPlayingVideo(), message.getPlayerCurrentTime());

videoPlayer.pauseVideo(playingVideo);
}

}
Loading
Loading