Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@SpringBootApplication(scanBasePackages = "com.jootalkpia.signaling_server")
public class SignalingServerApplication {

public static void main(String[] args) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,57 +1,57 @@
package com.jootalkpia.signaling_server.config;

import com.jootalkpia.signaling_server.model.Huddle;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;

@Configuration
public class RedisConfig {

@Value("${spring.data.redis.host}")
private String redisHost;

@Value("${spring.data.redis.port}")
private int redisPort;

@Bean
public RedisConnectionFactory redisConnectionFactory() {
RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
config.setHostName(redisHost);
config.setPort(redisPort);

return new LettuceConnectionFactory(config);
}

@Bean
public RedisTemplate<String, Huddle> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Huddle> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new Jackson2JsonRedisSerializer<>(Huddle.class));
template.afterPropertiesSet();
return template;
}

@Bean
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
return new StringRedisTemplate(redisConnectionFactory);
}

@Bean
public RedisTemplate<String, Long> longRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Long> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new Jackson2JsonRedisSerializer<>(Long.class));
template.afterPropertiesSet();
return template;
}
}
//package com.jootalkpia.signaling_server.config;
//
//import com.jootalkpia.signaling_server.model.Huddle;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.data.redis.connection.RedisConnectionFactory;
//import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
//import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.data.redis.core.StringRedisTemplate;
//import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
//import org.springframework.data.redis.serializer.StringRedisSerializer;
//
//@Configuration
//public class RedisConfig {
//
// @Value("${spring.data.redis.host}")
// private String redisHost;
//
// @Value("${spring.data.redis.port}")
// private int redisPort;
//
// @Bean
// public RedisConnectionFactory redisConnectionFactory() {
// RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
// config.setHostName(redisHost);
// config.setPort(redisPort);
//
// return new LettuceConnectionFactory(config);
// }
//
// @Bean
// public RedisTemplate<String, Huddle> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
// RedisTemplate<String, Huddle> template = new RedisTemplate<>();
// template.setConnectionFactory(redisConnectionFactory);
// template.setKeySerializer(new StringRedisSerializer());
// template.setValueSerializer(new Jackson2JsonRedisSerializer<>(Huddle.class));
// template.afterPropertiesSet();
// return template;
// }
//
// @Bean
// public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
// return new StringRedisTemplate(redisConnectionFactory);
// }
//
// @Bean
// public RedisTemplate<String, Long> longRedisTemplate(RedisConnectionFactory redisConnectionFactory) {
// RedisTemplate<String, Long> template = new RedisTemplate<>();
// template.setConnectionFactory(redisConnectionFactory);
// template.setKeySerializer(new StringRedisSerializer());
// template.setValueSerializer(new Jackson2JsonRedisSerializer<>(Long.class));
// template.afterPropertiesSet();
// return template;
// }
//}
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
package com.jootalkpia.signaling_server.config;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.kurento.client.KurentoClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
import com.jootalkpia.signaling_server.rtc.KurentoHandler;

@Configuration
@EnableWebSocket
@RequiredArgsConstructor
@Slf4j
public class WebRtcConfig implements WebSocketConfigurer {

private final KurentoHandler kurentoHandler;

@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(kurentoHandler, "/signal").setAllowedOrigins("*");
}
}
//package com.jootalkpia.signaling_server.config;
//
//import lombok.RequiredArgsConstructor;
//import lombok.extern.slf4j.Slf4j;
//import org.kurento.client.KurentoClient;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.web.socket.config.annotation.EnableWebSocket;
//import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
//import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
//import com.jootalkpia.signaling_server.rtc.KurentoHandler;
//
//@Configuration
//@EnableWebSocket
//@RequiredArgsConstructor
//@Slf4j
//public class WebRtcConfig implements WebSocketConfigurer {
//
// private final KurentoHandler kurentoHandler;
//
// @Override
// public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
// registry.addHandler(kurentoHandler, "/signal").setAllowedOrigins("*");
// }
//}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic"); // 클라이언트가 구독하는 메시지 브로커 경로
config.enableSimpleBroker("/topic", "/queue"); // /topic: 브로드캐스트, /queue: 1:1 메시지
config.setUserDestinationPrefix("/user");
config.setApplicationDestinationPrefixes("/app"); // 클라이언트에서 메시지를 보낼 때 사용
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
package com.jootalkpia.signaling_server.model;

import java.time.LocalDateTime;

public record Huddle(
String huddleId,
Long channelId,
Long createdByUserId,
LocalDateTime createdAt
) {
public Huddle(String huddleId, Long channelId, Long createdByUserId) {
this(huddleId, channelId, createdByUserId, LocalDateTime.now());
}
}
//package com.jootalkpia.signaling_server.model;
//
//import java.time.LocalDateTime;
//
//public record Huddle(
// String huddleId,
// Long channelId,
// Long createdByUserId,
// LocalDateTime createdAt
//) {
// public Huddle(String huddleId, Long channelId, Long createdByUserId) {
// this(huddleId, channelId, createdByUserId, LocalDateTime.now());
// }
//}
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
package com.jootalkpia.signaling_server.model;

import lombok.Getter;
import lombok.RequiredArgsConstructor;
import org.kurento.client.IceCandidate;
import org.kurento.client.WebRtcEndpoint;
import org.springframework.web.socket.WebSocketSession;

@RequiredArgsConstructor
@Getter
public class KurentoUserSession {
private final Long userId;
private final String huddleId;
private final WebSocketSession session;
private final WebRtcEndpoint webRtcEndpoint;

public void addIceCandidate(IceCandidate candidate) {
webRtcEndpoint.addIceCandidate(candidate);
}
}
//package com.jootalkpia.signaling_server.model;
//
//import lombok.Getter;
//import lombok.RequiredArgsConstructor;
//import org.kurento.client.IceCandidate;
//import org.kurento.client.WebRtcEndpoint;
//import org.springframework.web.socket.WebSocketSession;
//
//@RequiredArgsConstructor
//@Getter
//public class KurentoUserSession {
// private final Long userId;
// private final String huddleId;
// private final WebSocketSession session;
// private final WebRtcEndpoint webRtcEndpoint;
//
// public void addIceCandidate(IceCandidate candidate) {
// webRtcEndpoint.addIceCandidate(candidate);
// }
//}
Original file line number Diff line number Diff line change
@@ -1,29 +1,29 @@
package com.jootalkpia.signaling_server.repository;

import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Repository;
import org.springframework.data.redis.core.ValueOperations;

@Repository
public class ChannelHuddleRepository {
private final RedisTemplate<String, String> redisTemplate;
private final ValueOperations<String, String> valueOps;

public ChannelHuddleRepository(RedisTemplate<String, String> redisTemplate) {
this.redisTemplate = redisTemplate;
this.valueOps = redisTemplate.opsForValue();
}

public void saveChannelHuddle(Long channelId, String huddleId) {
valueOps.set("channel:" + channelId, huddleId);
}

public String getHuddleByChannel(Long channelId) {
return valueOps.get("channel:" + channelId);
}

public void deleteChannelHuddle(Long channelId) {
redisTemplate.delete("channel:" + channelId);
}
}

//package com.jootalkpia.signaling_server.repository;
//
//import org.springframework.data.redis.core.RedisTemplate;
//import org.springframework.stereotype.Repository;
//import org.springframework.data.redis.core.ValueOperations;
//
//@Repository
//public class ChannelHuddleRepository {
// private final RedisTemplate<String, String> redisTemplate;
// private final ValueOperations<String, String> valueOps;
//
// public ChannelHuddleRepository(RedisTemplate<String, String> redisTemplate) {
// this.redisTemplate = redisTemplate;
// this.valueOps = redisTemplate.opsForValue();
// }
//
// public void saveChannelHuddle(Long channelId, String huddleId) {
// valueOps.set("channel:" + channelId, huddleId);
// }
//
// public String getHuddleByChannel(Long channelId) {
// return valueOps.get("channel:" + channelId);
// }
//
// public void deleteChannelHuddle(Long channelId) {
// redisTemplate.delete("channel:" + channelId);
// }
//}
//
Loading