Skip to content

Commit 8f70fb6

Browse files
feat/#95 :: RoomService의 joinRoom 로직 구현
- RoomService에서 서버로 요청을 보내는 로직을 구현했습니다. Co-Authored-By: Youngkyu Song <ace_lephant@naver.com>
1 parent 84f241e commit 8f70fb6

File tree

2 files changed

+41
-6
lines changed

2 files changed

+41
-6
lines changed

PhotoGether/DataLayer/PhotoGetherData/PhotoGetherData/ServiceImpl/RoomServiceImpl.swift

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

6196
public enum RoomServiceError: LocalizedError {

PhotoGether/DomainLayer/PhotoGetherDomain/PhotoGetherDomainInterface/Service/RoomService.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@ public protocol RoomService {
55
var createRoomResponsePublisher: AnyPublisher<RoomOwnerEntity, Error> { get }
66

77
func createRoom() -> AnyPublisher<RoomOwnerEntity, Error>
8-
func joinRoom()
8+
func joinRoom(to roomID: String) -> AnyPublisher<JoinRoomEntity, Error>
99
}

0 commit comments

Comments
 (0)