// // CallEngineManager.swift // TUICallKit // // Created by vincepzhang on 2023/1/6. // import Foundation import TUICore import TUICallEngine #if canImport(TXLiteAVSDK_TRTC) import TXLiteAVSDK_TRTC #elseif canImport(TXLiteAVSDK_Professional) import TXLiteAVSDK_Professional #endif class CallEngineManager { static let instance = CallEngineManager() let voipDataSyncHandler = VoIPDataSyncHandler() func setSelfInfo(nickname: String, avatar: String, succ: @escaping TUICallSucc, fail: @escaping TUICallFail) { TUICallEngine.createInstance().setSelfInfo(nickname: nickname, avatar: avatar) { TUICallState.instance.selfUser.value.avatar.value = avatar TUICallState.instance.selfUser.value.nickname.value = nickname succ() } fail: { code, message in fail(code, message) } } func call(userId: String, callMediaType: TUICallMediaType, params: TUICallParams, succ: @escaping TUICallSucc, fail: @escaping TUICallFail) { TUICallEngine.createInstance().call(userId: userId, callMediaType: callMediaType, params: params) { User.getUserInfosFromIM(userIDs: [userId]) { mInviteeList in TUICallState.instance.remoteUserList.value = mInviteeList for index in 0.. TRTCCloud { return TUICallEngine.createInstance().getTRTCCloudInstance() } func setFramework() { var jsonParams: [String: Any] if TUICore.getService(TUICore_TUIChatService) == nil { jsonParams = ["api": "setFramework", "params": ["component": 14, "language": 3,],] } else { jsonParams = ["api": "setFramework", "params": ["component": 15, "language": 3,],] } guard let data = try? JSONSerialization.data(withJSONObject: jsonParams, options: JSONSerialization.WritingOptions(rawValue: 0)) else { return } guard let paramsString = NSString(data: data, encoding: String.Encoding.utf8.rawValue) as? String else { return } TUICallEngine.createInstance().callExperimentalAPI(jsonObject: paramsString) } func setExcludeFromHistoryMessage() { if TUICore.getService(TUICore_TUIChatService) == nil { return } let jsonParams: [String: Any] = ["api": "setExcludeFromHistoryMessage", "params": ["excludeFromHistoryMessage": false,],] guard let data = try? JSONSerialization.data(withJSONObject: jsonParams, options: JSONSerialization.WritingOptions(rawValue: 0)) else { return } guard let paramsString = NSString(data: data, encoding: String.Encoding.utf8.rawValue) as? String else { return } TUICallEngine.createInstance().callExperimentalAPI(jsonObject: paramsString) } func setBlurBackground() { let currentEnable = TUICallState.instance.enableBlurBackground.value let level = !currentEnable ? 3 : 0 TUICallState.instance.enableBlurBackground.value = !currentEnable TUICallEngine.createInstance().setBlurBackground(level) { code, message in TUICallState.instance.enableBlurBackground.value = false } } func reportOnlineLog(_ enableVirtualBackground: Bool) { let msgDic: [String: Any] = ["enablevirtualbackground": enableVirtualBackground, "version": TUICALL_VERSION, "platform": "iOS", "framework": "native", "sdk_app_id": TUILogin.getSdkAppID(),] guard let msgData = try? JSONSerialization.data(withJSONObject: msgDic, options: JSONSerialization.WritingOptions(rawValue: 0)) else { return } guard let msgString = NSString(data: msgData, encoding: String.Encoding.utf8.rawValue) as? String else { return } let jsonParams: [String: Any] = ["api": "reportOnlineLog", "params": ["level": 1, "msg":msgDic, "more_msg":"TUICallkit"],] guard let data = try? JSONSerialization.data(withJSONObject: jsonParams, options: JSONSerialization.WritingOptions(rawValue: 0)) else { return } guard let paramsString = NSString(data: data, encoding: String.Encoding.utf8.rawValue) as? String else { return } TUICallEngine.createInstance().getTRTCCloudInstance().callExperimentalAPI(paramsString) } func closeVoIP() { voipDataSyncHandler.closeVoIP() } func callBegin() { voipDataSyncHandler.callBegin() } func updateVoIPInfo(callerId: String, calleeList: [String], groupId: String) { voipDataSyncHandler.updateVoIPInfo(callerId: callerId, calleeList: calleeList, groupId: groupId) } }