@@ -7,7 +7,11 @@ public final class RoomServiceImpl: RoomService {
77 public var createRoomResponsePublisher : AnyPublisher < RoomOwnerEntity , Error > {
88 _createRoomResponsePublisher. eraseToAnyPublisher ( )
99 }
10+ public var joinRoomResponsePublisher : AnyPublisher < JoinRoomEntity , Error > {
11+ _joinRoomResponsePublisher. eraseToAnyPublisher ( )
12+ }
1013 private let _createRoomResponsePublisher = PassthroughSubject < RoomOwnerEntity , Error > ( )
14+ private let _joinRoomResponsePublisher = PassthroughSubject < JoinRoomEntity , Error > ( )
1115 private var cancellables : Set < AnyCancellable > = [ ]
1216
1317 private let decoder = JSONDecoder ( )
@@ -31,7 +35,18 @@ public final class RoomServiceImpl: RoomService {
3135 return createRoomResponsePublisher
3236 }
3337
34- public func joinRoom( ) { }
38+ public func joinRoom( to roomID: String ) -> AnyPublisher < JoinRoomEntity , Error > {
39+ let joinRoomMessage = JoinRoomRequestMessage ( roomID: roomID) . toData ( encoder: encoder)
40+ let joinRoomRequest = RoomRequestDTO ( messageType: . joinRoom, message: joinRoomMessage)
41+
42+ guard let data = joinRoomRequest. toData ( encoder: encoder) else {
43+ debugPrint ( " 방 참가 요청 데이터 인코딩 실패: \( joinRoomRequest) " )
44+ return Fail ( error: RoomServiceError . failedToEncoding) . eraseToAnyPublisher ( )
45+ }
46+
47+ webSocketClient. send ( data: data)
48+ return joinRoomResponsePublisher
49+ }
3550
3651 private func bindWebSocketClient( ) {
3752 self . webSocketClient. webSocketdidReceiveDataPublisher
@@ -43,19 +58,39 @@ public final class RoomServiceImpl: RoomService {
4358 switch response. messageType {
4459 case . createRoom:
4560 guard let message = response. message else { return }
46- guard let message = message. toDTO ( type: CreateRoomMessage . self) else {
61+ guard let message = message. toDTO ( type: CreateRoomResponseMessage . self) else {
4762 debugPrint ( " Decode Failed to CreateRoomMessage: \( message) " )
4863 return
4964 }
50- let createRoomEntity = RoomOwnerEntity ( roomID : message. roomID , userID : message . userID )
51- _createRoomResponsePublisher. send ( createRoomEntity )
65+ let roomOwnerEntity = message. toEntity ( )
66+ _createRoomResponsePublisher. send ( roomOwnerEntity )
5267
5368 debugPrint ( " 방 생성 성공: \( message. roomID) \n 유저 아이디: \( message. userID) " )
5469 case . joinRoom:
55- break
70+ guard let message = decodeMessage (
71+ response. message,
72+ type: JoinRoomResponseMessage . self
73+ ) else {
74+ debugPrint ( " Decode Failed to JoinRoomEntity: \( String ( describing: response. message) ) " )
75+ return
76+ }
77+ let joinRoomEntity = message. toEntity ( )
78+ _joinRoomResponsePublisher. send ( joinRoomEntity)
79+
80+ debugPrint ( " 방 참가 성공 \n 유저 아이디: \( message. userID) \n 방 유저들 아이디: \( message. clientsID) " )
5681 }
5782 } . store ( in: & cancellables)
5883 }
84+
85+ private func decodeMessage< T: Decodable > ( _ message: Data ? , type: T . Type ) -> T ? {
86+ guard let message = message else { return nil }
87+ guard let dto = message. toDTO ( type: type) else {
88+ debugPrint ( " Decode Failed to: \( message) " )
89+ return nil
90+ }
91+
92+ return dto
93+ }
5994}
6095
6196public enum RoomServiceError : LocalizedError {
0 commit comments