112 lines
3.7 KiB
Swift
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)
|
|
}
|
|
}
|
|
}
|