-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #26 from Zatch-Team/Feature/Chat
Feature/chat
- Loading branch information
Showing
11 changed files
with
196 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
29 changes: 29 additions & 0 deletions
29
src/main/java/com/zatch/zatchserver/Handler/WebSocketHandler.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
package com.zatch.zatchserver.Handler; | ||
|
||
import com.fasterxml.jackson.databind.ObjectMapper; | ||
import com.zatch.zatchserver.domain.ChatRoom; | ||
import com.zatch.zatchserver.dto.ChatMessage; | ||
import com.zatch.zatchserver.service.ChatService; | ||
import lombok.RequiredArgsConstructor; | ||
import lombok.extern.slf4j.Slf4j; | ||
import org.springframework.stereotype.Component; | ||
import org.springframework.web.socket.TextMessage; | ||
import org.springframework.web.socket.WebSocketSession; | ||
import org.springframework.web.socket.handler.TextWebSocketHandler; | ||
|
||
@Slf4j | ||
@RequiredArgsConstructor | ||
@Component | ||
public class WebSocketHandler extends TextWebSocketHandler { | ||
private final ObjectMapper objectMapper; | ||
private final ChatService chatService; | ||
|
||
protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { | ||
String payload = message.getPayload(); | ||
log.info("{}", payload); | ||
ChatMessage chatMessage = objectMapper.readValue(payload, ChatMessage.class); | ||
|
||
ChatRoom chatRoom = chatService.findRoomById(chatMessage.getRoomId()); | ||
chatRoom.handlerActions(session, chatMessage, chatService); | ||
} | ||
} |
20 changes: 20 additions & 0 deletions
20
src/main/java/com/zatch/zatchserver/config/WebSocketConfig.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
package com.zatch.zatchserver.config; | ||
|
||
import com.zatch.zatchserver.Handler.WebSocketHandler; | ||
import lombok.RequiredArgsConstructor; | ||
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; | ||
|
||
@RequiredArgsConstructor | ||
@Configuration | ||
@EnableWebSocket //webSocket 활성화 | ||
public class WebSocketConfig implements WebSocketConfigurer { | ||
private final WebSocketHandler webSocketHandler; | ||
@Override | ||
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { | ||
// Handler와 webSocket 주소를 WebSocketHandlerRegistry에 추가 -> 해당 주소로 접근하면 웹소켓 연결 가능 | ||
registry.addHandler(webSocketHandler, "/ws/chat").setAllowedOrigins("*"); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
package com.zatch.zatchserver.domain; | ||
|
||
import com.zatch.zatchserver.dto.ChatMessage; | ||
import com.zatch.zatchserver.service.ChatService; | ||
import lombok.Builder; | ||
import lombok.Getter; | ||
import org.springframework.web.socket.WebSocketSession; | ||
|
||
import java.util.HashSet; | ||
import java.util.Set; | ||
|
||
@Getter | ||
public class ChatRoom { | ||
private String roomId; | ||
private String name; | ||
private Set<WebSocketSession> sessions = new HashSet<>(); | ||
|
||
@Builder | ||
public ChatRoom(String roomId, String name) { | ||
this.roomId = roomId; | ||
this.name = name; | ||
} | ||
|
||
public void handlerActions(WebSocketSession session, ChatMessage chatMessage, ChatService chatService) { | ||
chatService.updateDB(String.valueOf(chatMessage.getType()), chatMessage.getRoomId(), chatMessage.getSender(), chatMessage.getMessage()); | ||
if (chatMessage.getType().equals(ChatMessage.MessageType.ENTER)) { | ||
sessions.add(session); | ||
chatMessage.setMessage(chatMessage.getSender() + "님이 입장했습니다."); | ||
} | ||
sendMessage(chatMessage, chatService); | ||
} | ||
|
||
private <T> void sendMessage(T message, ChatService chatService) { | ||
sessions.parallelStream() | ||
.forEach(session -> chatService.sendMessage(session, message)); | ||
} | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
package com.zatch.zatchserver.dto; | ||
|
||
import lombok.Getter; | ||
import lombok.Setter; | ||
|
||
@Getter | ||
@Setter | ||
public class ChatMessage { | ||
public enum MessageType{ | ||
ENTER, TALK | ||
// ENTER : 처음 채팅방에 들어온 상태 | ||
// TALK : 이미 session에 연결되어 있고 채팅 중인 상태 | ||
} | ||
|
||
private MessageType type; | ||
private String roomId; | ||
private String sender; | ||
private String message; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
1 change: 1 addition & 0 deletions
1
src/main/java/com/zatch/zatchserver/repository/ChatRepositoryImpl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,6 @@ | ||
package com.zatch.zatchserver.repository; | ||
|
||
public interface ChatRepositoryImpl { | ||
String updateDB(String type, String roomId, String sender, String message); | ||
String after_deal(Long send_user_id, Long receive_user_id, String review_context, int star_rating); | ||
} |
10 changes: 10 additions & 0 deletions
10
src/main/java/com/zatch/zatchserver/service/ChatService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,5 +1,15 @@ | ||
package com.zatch.zatchserver.service; | ||
|
||
import com.zatch.zatchserver.domain.ChatRoom; | ||
import org.springframework.web.socket.WebSocketSession; | ||
|
||
import java.util.List; | ||
|
||
public interface ChatService { | ||
List<ChatRoom> findAllRoom(); | ||
ChatRoom createRoom(String name); | ||
ChatRoom findRoomById(String roomId); | ||
<T> void sendMessage(WebSocketSession session, T message); | ||
String after_deal(Long send_user_id, Long receive_user_id, String review_context, int star_rating); | ||
String updateDB(String type, String roomId, String sender, String message); | ||
} |
48 changes: 48 additions & 0 deletions
48
src/main/java/com/zatch/zatchserver/service/ChatServiceImpl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,17 +1,65 @@ | ||
package com.zatch.zatchserver.service; | ||
|
||
import com.fasterxml.jackson.databind.ObjectMapper; | ||
import com.zatch.zatchserver.domain.ChatRoom; | ||
import com.zatch.zatchserver.repository.ChatRepository; | ||
import lombok.RequiredArgsConstructor; | ||
import lombok.extern.slf4j.Slf4j; | ||
import org.springframework.stereotype.Service; | ||
import org.springframework.web.socket.TextMessage; | ||
import org.springframework.web.socket.WebSocketSession; | ||
|
||
import javax.annotation.PostConstruct; | ||
import java.io.IOException; | ||
import java.util.*; | ||
|
||
@Slf4j | ||
@RequiredArgsConstructor | ||
@Service | ||
public class ChatServiceImpl implements ChatService { | ||
private final ObjectMapper objectMapper; | ||
private Map<String, ChatRoom> chatRooms; | ||
|
||
private final ChatRepository chatRepository; | ||
|
||
@PostConstruct | ||
private void init() { | ||
chatRooms = new LinkedHashMap<>(); | ||
} | ||
|
||
public List<ChatRoom> findAllRoom() { | ||
return new ArrayList<>(chatRooms.values()); | ||
} | ||
|
||
public ChatRoom findRoomById(String roomId) { | ||
return chatRooms.get(roomId); | ||
} | ||
|
||
public ChatRoom createRoom(String name) { | ||
String randomId = UUID.randomUUID().toString(); | ||
ChatRoom chatRoom = ChatRoom.builder() | ||
.roomId(randomId) | ||
.name(name) | ||
.build(); | ||
chatRooms.put(randomId, chatRoom); | ||
return chatRoom; | ||
} | ||
|
||
public <T> void sendMessage(WebSocketSession session, T message) { | ||
try{ | ||
session.sendMessage(new TextMessage(objectMapper.writeValueAsString(message))); | ||
} catch (IOException e) { | ||
log.error(e.getMessage(), e); | ||
} | ||
} | ||
|
||
@Override | ||
public String after_deal(Long send_user_id, Long receive_user_id, String review_context, int star_rating) { | ||
return chatRepository.after_deal(send_user_id, receive_user_id, review_context, star_rating); | ||
} | ||
|
||
@Override | ||
public String updateDB(String type, String roomId, String sender, String message) { | ||
return chatRepository.updateDB(type, roomId, sender, message); | ||
} | ||
} |