Files
featherVoice/TUIKit/TUIRoomKit/RoomExtension/RoomCommon/ServiceInitializer.swift
2025-08-08 10:49:36 +08:00

112 lines
3.7 KiB
Swift

//
// ServiceInitializer.swift
// TUILiveKit
//
// Created by WesleyLei on 2023/10/19.
//
import Foundation
import TUICore
import RTCRoomEngine
extension NSObject {
@objc class func liveKitExtensionLoad() {
ServiceInitializer.shared.registerObserver()
}
}
class ServiceInitializer {
private var isLoginEngine: Bool = false
static let shared = ServiceInitializer()
private var invitationManager: TUIConferenceInvitationManager?
private var invitationObserver: InvitationObserverService?
private init() {
}
func registerObserver() {
NotificationCenter.default.addObserver(self, selector: #selector(logoutSuccess(_:)),
name: NSNotification.Name(rawValue: NSNotification.Name.TUILogoutSuccess.rawValue),
object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(loginSuccess(_:)),
name: NSNotification.Name(rawValue: NSNotification.Name.TUILoginSuccess.rawValue),
object: nil)
}
@objc private func logoutSuccess(_ notification: Notification) {
logout(onSuccess: nil, onError: nil)
removeInvitationObserver()
}
@objc private func loginSuccess(_ notification: Notification) {
login(onSuccess: nil, onError: nil)
addInvitationObserver()
}
private func addInvitationObserver() {
invitationObserver = InvitationObserverService.shared
invitationManager = TUIRoomEngine.sharedInstance().getExtension(extensionType: .conferenceInvitationManager) as? TUIConferenceInvitationManager
guard let invitationObserver = invitationObserver else { return }
invitationManager?.addObserver(invitationObserver)
}
private func removeInvitationObserver() {
guard let invitationObserver = invitationObserver else { return }
invitationManager?.removeObserver(invitationObserver)
}
func login(onSuccess: TUISuccessBlock?, onError: TUIErrorBlock?) {
if isLoginEngine {
onSuccess?()
} else {
let sdkAppId = Int(TUILogin.getSdkAppID())
let userId = TUILogin.getUserID() ?? ""
let userSig = TUILogin.getUserSig() ?? ""
ServiceInitializer.login(sdkAppId: sdkAppId, userId: userId, userSig: userSig) { [weak self] in
guard let self = self else { return }
self.isLoginEngine = true
onSuccess?()
} onError: { code, message in
onError?(code, message)
}
}
}
func logout(onSuccess: TUISuccessBlock?, onError: TUIErrorBlock?) {
if isLoginEngine {
ServiceInitializer.logout {
onSuccess?()
} onError: { code, message in
onError?(code, message)
}
self.isLoginEngine = false
} else {
onSuccess?()
}
}
deinit {
NotificationCenter.default.removeObserver(self)
}
}
extension ServiceInitializer {
static func login(sdkAppId:Int,userId:String,userSig:String,onSuccess: @escaping TUISuccessBlock, onError: @escaping TUIErrorBlock) {
TUIRoomEngine.login(sdkAppId: sdkAppId, userId: userId, userSig: userSig) {
onSuccess()
} onError: { code, message in
onError(code, message)
}
}
static func logout(onSuccess: @escaping TUISuccessBlock, onError: @escaping TUIErrorBlock) {
TUIRoomEngine.logout {
onSuccess()
} onError: { code, message in
onError(code, message)
}
}
}