// // FloatWindowViewModel.swift // TUICallKit // // Created by vincepzhang on 2023/2/27. // import Foundation import TUICallEngine class FloatingWindowViewModel { let callStatusObserver = Observer() let mediaTypeObserver = Observer() let remoteUserListObserver = Observer() let timeCountObserver = Observer() let sceneObserver = Observer() let selfPlayoutVolumeObserver = Observer() let remotePlayoutVolumeObserver = Observer() let callTime: Observable = Observable(0) let mediaType: Observable = Observable(.unknown) let selfCallStatus: Observable = Observable(.none) let remoteUserList: Observable<[User]> = Observable(Array()) let selfUser: Observable = Observable(User()) let scene: Observable = Observable(TUICallScene.single) let currentSpeakUser: Observable = Observable(User()) init() { callTime.value = TUICallState.instance.timeCount.value selfCallStatus.value = TUICallState.instance.selfUser.value.callStatus.value mediaType.value = TUICallState.instance.mediaType.value remoteUserList.value = TUICallState.instance.remoteUserList.value selfUser.value = TUICallState.instance.selfUser.value scene.value = TUICallState.instance.scene.value registerObserve() } deinit { TUICallState.instance.selfUser.value.callStatus.removeObserver(callStatusObserver) TUICallState.instance.mediaType.removeObserver(mediaTypeObserver) TUICallState.instance.remoteUserList.removeObserver(remoteUserListObserver) TUICallState.instance.timeCount.removeObserver(timeCountObserver) TUICallState.instance.scene.removeObserver(sceneObserver) TUICallState.instance.selfUser.value.playoutVolume.removeObserver(selfPlayoutVolumeObserver) for index in 0.. 30 { self.updateCurrentSpeakUser(user: TUICallState.instance.selfUser.value) } } for index in 0.. 30 { self.updateCurrentSpeakUser(user: user) } } } } func updateCurrentSpeakUser(user: User) { if user.id.value.count > 0 && currentSpeakUser.value.id.value != user.id.value { self.currentSpeakUser.value = user } } func getCallTimeString() -> String { return GCDTimer.secondToHMSString(second: callTime.value) } func startRemoteView(user: User, videoView: TUIVideoView){ CallEngineManager.instance.startRemoteView(user: user, videoView: videoView) } }