96 lines
2.8 KiB
Swift
96 lines
2.8 KiB
Swift
//
|
|
// RoomaInviteViewModel.swift
|
|
// TUIRoomKit
|
|
//
|
|
// Created by janejntang on 2023/5/24.
|
|
// Copyright © 2023 Tencent. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
import TUICore
|
|
import AVFAudio
|
|
|
|
class InvitedToJoinRoomViewModel: NSObject, AVAudioPlayerDelegate {
|
|
let inviteUserName: String
|
|
let roomId: String
|
|
var avatarUrl: String
|
|
var displayLink: CADisplayLink?
|
|
var audioPlayer: AVAudioPlayer = AVAudioPlayer()
|
|
var startTime: TimeInterval?
|
|
var endTime: TimeInterval?
|
|
var messageManager: RoomMessageManager {
|
|
return RoomMessageManager.shared
|
|
}
|
|
private var roomManager: RoomManager {
|
|
RoomManager.shared
|
|
}
|
|
init(inviteUserName: String, inviteUserAvatarUrl: String, roomId: String) {
|
|
self.inviteUserName = inviteUserName
|
|
self.roomId = roomId
|
|
avatarUrl = inviteUserAvatarUrl
|
|
super.init()
|
|
playAudio(forResource: "phone_ringing", ofType: "mp3")
|
|
}
|
|
|
|
func startPlay() {
|
|
audioPlayer.play()
|
|
}
|
|
|
|
func stopPlay() {
|
|
audioPlayer.stop()
|
|
}
|
|
|
|
func disagreeAction() {
|
|
stopPlay()
|
|
closeInvitedToJoinRoomView()
|
|
}
|
|
|
|
func agreeAction() {
|
|
stopPlay()
|
|
if EngineManager.shared.store.isEnteredRoom {
|
|
roomManager.exitOrDestroyPreviousRoom { [weak self] in
|
|
guard let self = self else { return }
|
|
self.enterRoom()
|
|
} onError: { code, message in
|
|
debugPrint("exitRoom, code:\(code), message:\(message)")
|
|
}
|
|
} else {
|
|
enterRoom()
|
|
}
|
|
}
|
|
|
|
private func enterRoom() {
|
|
roomManager.enterRoom(roomId: roomId)
|
|
closeInvitedToJoinRoomView()
|
|
}
|
|
|
|
private func playAudio(forResource: String, ofType: String){
|
|
if let bundlePath = Bundle.main.path(forResource: forResource, ofType: ofType) {
|
|
let url = URL(fileURLWithPath: bundlePath)
|
|
do {
|
|
try AVAudioSession.sharedInstance().overrideOutputAudioPort(.speaker)
|
|
} catch let error {
|
|
debugPrint("AVAudioSession set outputAudioPort error:\(error.localizedDescription)")
|
|
}
|
|
do {
|
|
try audioPlayer = AVAudioPlayer(contentsOf: url)
|
|
audioPlayer.numberOfLoops = -1
|
|
audioPlayer.delegate = self
|
|
audioPlayer.prepareToPlay()
|
|
} catch let error {
|
|
debugPrint("audioPlayer error: \(error.localizedDescription)")
|
|
}
|
|
}
|
|
}
|
|
|
|
private func closeInvitedToJoinRoomView() {
|
|
TUIRoomImAccessService.shared.inviteWindow?.isHidden = true
|
|
TUIRoomImAccessService.shared.inviteWindow = nil
|
|
TUIRoomImAccessService.shared.isShownInvitedToJoinRoomView = false
|
|
}
|
|
|
|
deinit {
|
|
debugPrint("deinit \(self)")
|
|
}
|
|
}
|