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

[Feature] 화이트보드 입장 핸들링 #141

Merged
merged 7 commits into from
Dec 3, 2024

Conversation

ekrud99
Copy link
Collaborator

@ekrud99 ekrud99 commented Dec 3, 2024

🌁 Background

  • 유령 화이트보드 등장에 따른 입장 실패 처리 구현

📱 Screenshot

2024-12-03.3.49.24.mov

👩‍💻 Contents

  • 화이트보드 입장 요청 시 로딩 인디케이터 추가
    • 입장 성공 및 실패 응답을 받아올 때 까지(3초)
  • 입장 성공 여부에 따른 처리
    • 기기가 연결되면 WhiteboardRepository는 연결 성공 여부를 Bool값으로 방출합니다.
    • WhiteboardUseCase는 Join 요청 시 일회성 구독을 시작합니다. (다른 참여자가 참가했을 때 값을 받지 않기 위해서)
    • Join 요청이 성공했다면 WhiteboardViewController로 진입합니다.
    • Join 요청이 실패했다면 Alert를 띄웁니다.

✅ Testing

유령 화이트 보드를 만드는 방법은 방을 만들고 참여자 입장 후 호스트가 먼저 나가고 참여자가 나가는 것입니다.
시뮬레이터에선 방이 사라지지만 실기기에서는 사라지지않습니다.
위에있는 동작 영상 속 첫 번째 셀은 유령 화이트보드로, 연결 시도시 Alert를 띄웁니다.
두번째 셀은 정상적인 방으로 3초 이내에 연결 요청이 수락되어 입장합니다.

📝 Review Note

  • 간혹 유령방인데 연결되는 보드가 있습니다. 안타깝게도 이러한 방에는 대처할 수 없습니다.
  • timeout을 3초로 잡았는데, 이건 논의해볼 필요가 있다고 생각합니다.
    • 현재 3초가 지나면 disconnect 처리하고있습니다.

📣 Related Issue

@ekrud99 ekrud99 self-assigned this Dec 3, 2024
Copy link
Collaborator

@choijungp choijungp left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ㅠ.ㅠ .......... 다우니 참말로 대단하고 고맙고 존경합니다 .. .... ........
MPC와의 맞짱에서 전 다우니가 이겼다고 생각함 ~~ 어푸루부 !!

@@ -139,6 +142,7 @@ extension WhiteboardRepository: NearbyNetworkConnectionDelegate {
with context: Data?,
isHost: Bool
) {
connectionResultSubject.send(true)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

아 얘가 보내는 값은 별로 중요하지 않은 건가요 ?? 항상 true를 보내고 UseCase에서 분기처리 ? ? ?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

뭔가 false를 보내줄 일이 있지 않을까.. 해서 남겨놓았습니다만..
조이가 보신대로 true를 보내주는 코드만 존재합니다.
변경하는게 맞을까요?
일단 true를 보내는 이유는 연결에 성공했기 때문입니다~!

@@ -13,6 +13,9 @@ public final class WhiteboardUseCase: WhiteboardUseCaseInterface {
private var profileRepository: ProfileRepositoryInterface
private let whiteboardListSubject: CurrentValueSubject<[Whiteboard], Never>
public let whiteboardListPublisher: AnyPublisher<[Whiteboard], Never>
public let whiteboardConnectionSubject: PassthroughSubject<Bool, Never>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

얜 private이여도 될 것 같아요 !!

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

헉 감사합니다!

Copy link
Member

@eemdeeks eemdeeks left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다 :)

현재 상황에서 현재 동작하는 방식에서 궁금한점이 있습니다..!
만약 리스트 클릭 후 3초가 되기 전에 방생성을 누르는 경우는 어떻게 되나요..??

whiteboardRepository.connectionResultPublisher
.timeout(.seconds(3), scheduler: DispatchQueue.main)
.first()
.replaceEmpty(with: false)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

오우 이 오퍼레이터 동작 방식이 궁금합니다!

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • timeout: 3초동안만 이벤트를 수신합니다
  • first: 첫 번째 응답을 받고 구독을 취소합니다. (PR 내용의 일회성 구독을 위해 사용하였습니다)
  • replaceEmpty: 응답을 못받았다면 false를 방출합니다
    종합적으로 3초동안 이벤트를 받는데 다른 참가자가 연결된 경우에도 이벤트를 받지 않기 위해 일회성 구독을 하고, 아무 값도 받아오지 못한 경우 실패를 위해 빈 값을 fasle로 치환했습니다!!

@ekrud99
Copy link
Collaborator Author

ekrud99 commented Dec 3, 2024

고생하셨습니다 :)

현재 상황에서 현재 동작하는 방식에서 궁금한점이 있습니다..! 만약 리스트 클릭 후 3초가 되기 전에 방생성을 누르는 경우는 어떻게 되나요..??

WhiteboardListViewControllerstartLoading, stopLoading 메서드를 보시면 isUserInteractionEnabled값을 변경하고있습니다.
로딩중일때는 view와 상호작용 할 수 없습니다 😃

@ekrud99
Copy link
Collaborator Author

ekrud99 commented Dec 3, 2024

ㅠ.ㅠ .......... 다우니 참말로 대단하고 고맙고 존경합니다 .. .... ........ MPC와의 맞짱에서 전 다우니가 이겼다고 생각함 ~~ 어푸루부 !!

졌습니다..

@ekrud99 ekrud99 merged commit 8189ec4 into develop Dec 3, 2024
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Feature] 화이트 보드 참여 실패 처리 구현
3 participants