InvitedToJoinRoomViewModel.swift 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. //
  2. // RoomaInviteViewModel.swift
  3. // TUIRoomKit
  4. //
  5. // Created by janejntang on 2023/5/24.
  6. // Copyright © 2023 Tencent. All rights reserved.
  7. //
  8. import Foundation
  9. import TUICore
  10. import AVFAudio
  11. class InvitedToJoinRoomViewModel: NSObject, AVAudioPlayerDelegate {
  12. let inviteUserName: String
  13. let roomId: String
  14. var avatarUrl: String
  15. var displayLink: CADisplayLink?
  16. var audioPlayer: AVAudioPlayer = AVAudioPlayer()
  17. var startTime: TimeInterval?
  18. var endTime: TimeInterval?
  19. var messageManager: RoomMessageManager {
  20. return RoomMessageManager.shared
  21. }
  22. private var roomManager: RoomManager {
  23. RoomManager.shared
  24. }
  25. init(inviteUserName: String, inviteUserAvatarUrl: String, roomId: String) {
  26. self.inviteUserName = inviteUserName
  27. self.roomId = roomId
  28. avatarUrl = inviteUserAvatarUrl
  29. super.init()
  30. playAudio(forResource: "phone_ringing", ofType: "mp3")
  31. }
  32. func startPlay() {
  33. audioPlayer.play()
  34. }
  35. func stopPlay() {
  36. audioPlayer.stop()
  37. }
  38. func disagreeAction() {
  39. stopPlay()
  40. closeInvitedToJoinRoomView()
  41. }
  42. func agreeAction() {
  43. stopPlay()
  44. if EngineManager.shared.store.isEnteredRoom {
  45. roomManager.exitOrDestroyPreviousRoom { [weak self] in
  46. guard let self = self else { return }
  47. self.enterRoom()
  48. } onError: { code, message in
  49. debugPrint("exitRoom, code:\(code), message:\(message)")
  50. }
  51. } else {
  52. enterRoom()
  53. }
  54. }
  55. private func enterRoom() {
  56. roomManager.enterRoom(roomId: roomId) {_ in
  57. let vc = ConferenceMainViewController()
  58. RoomRouter.shared.push(viewController: vc)
  59. } onError: { code, message in
  60. RoomRouter.makeToast(toast: code.description ?? message)
  61. }
  62. closeInvitedToJoinRoomView()
  63. }
  64. private func playAudio(forResource: String, ofType: String){
  65. if let bundlePath = Bundle.main.path(forResource: forResource, ofType: ofType) {
  66. let url = URL(fileURLWithPath: bundlePath)
  67. do {
  68. try AVAudioSession.sharedInstance().overrideOutputAudioPort(.speaker)
  69. } catch let error {
  70. debugPrint("AVAudioSession set outputAudioPort error:\(error.localizedDescription)")
  71. }
  72. do {
  73. try audioPlayer = AVAudioPlayer(contentsOf: url)
  74. audioPlayer.numberOfLoops = -1
  75. audioPlayer.delegate = self
  76. audioPlayer.prepareToPlay()
  77. } catch let error {
  78. debugPrint("audioPlayer error: \(error.localizedDescription)")
  79. }
  80. }
  81. }
  82. private func closeInvitedToJoinRoomView() {
  83. TUIRoomImAccessService.shared.inviteWindow?.isHidden = true
  84. TUIRoomImAccessService.shared.inviteWindow = nil
  85. TUIRoomImAccessService.shared.isShownInvitedToJoinRoomView = false
  86. }
  87. deinit {
  88. debugPrint("deinit \(self)")
  89. }
  90. }