Files
featherVoice/TUIKit/TUICallKit/TUICallKit-Swift/Service/TUICallKitService.swift
2025-08-08 10:49:36 +08:00

94 lines
4.1 KiB
Swift

//
// TUICallKitService.swift
// TUICallKit
//
// Created by vincepzhang on 2023/4/20.
//
import Foundation
import TUICore
import TUICallEngine
import UIKit
class TUICallKitService: NSObject, TUIServiceProtocol {
static let instance = TUICallKitService()
func startCall(groupID: String, userIDs: [String], callingType: TUICallMediaType) {
let selector = NSSelectorFromString("setOnlineUserOnly")
if TUICallEngine.createInstance().responds(to: selector) {
TUICallEngine.createInstance().perform(selector, with: 0)
}
if groupID.isEmpty {
guard let userID = userIDs.first else {
return
}
TUICallKit.createInstance().call(userId: userID, callMediaType: callingType)
} else {
TUICallKit.createInstance().groupCall(groupId: groupID, userIdList: userIDs, callMediaType: callingType)
}
}
}
// MARK: TUIServiceProtocol
extension TUICallKitService {
func onCall(_ method: String, param: [AnyHashable : Any]?) -> Any? {
guard let param = param else {
return nil
}
if method == TUICore_TUICallingService_EnableFloatWindowMethod {
guard let enableFloatWindow = param[TUICore_TUICallingService_EnableFloatWindowMethod_EnableFloatWindow] as? Bool else {
return nil
}
TUICallKit.createInstance().enableFloatWindow(enable: enableFloatWindow)
} else if method == TUICore_TUICallingService_EnableIncomingBannerMethod {
guard let enableIncomingBanner = param[TUICore_TUICallingService_EnableIncomingBannerMethod_EnableIncomingBanner] as? Bool else {
return nil
}
TUICallKit.createInstance().enableIncomingBanner(enable: enableIncomingBanner)
} else if method == TUICore_TUICallingService_EnableVirtualBackgroundForCallMethod {
guard let enableVirtualBackground = param[TUICore_TUICallingService_EnableVirtualBackgroundForCallMethod_EnableVirtualBackgroundForCall] as? Bool else {
return nil
}
TUICallKit.createInstance().enableVirtualBackground(enable: enableVirtualBackground)
} else if method == TUICore_TUICallingService_ShowCallingViewMethod {
guard let userIDs = param[TUICore_TUICallingService_ShowCallingViewMethod_UserIDsKey] as? [ String],
let mediaTypeIndex = param[TUICore_TUICallingService_ShowCallingViewMethod_CallTypeKey] as? String else {
return nil
}
var mediaType: TUICallMediaType = .unknown
if mediaTypeIndex == "0" {
mediaType = .audio
} else if mediaTypeIndex == "1" {
mediaType = .video
}
let groupId = param[TUICore_TUICallingService_ShowCallingViewMethod_GroupIDKey] as? String ?? ""
startCall(groupID: groupId, userIDs: userIDs, callingType: mediaType)
} else if method == TUICore_TUICallingService_ReceivePushCallingMethod {
guard let signalingInfo = param[TUICore_TUICallingService_ShowCallingViewMethod_SignalingInfo] as? V2TIMSignalingInfo else {
return nil
}
let selector = NSSelectorFromString("onReceiveGroupCallAPNs:")
if TUICallEngine.createInstance().responds(to: selector) {
TUICallEngine.createInstance().perform(selector, with: signalingInfo)
}
} else if method == TUICore_TUICallingService_EnableMultiDeviceAbilityMethod {
let key = TUICore_TUICallingService_EnableMultiDeviceAbilityMethod_EnableMultiDeviceAbility
guard let enableMultiDeviceAbility = param[key] as? Bool else {
return nil
}
TUICallEngine.createInstance().enableMultiDeviceAbility(enable: enableMultiDeviceAbility) {
} fail: { code, message in
}
} else {
CallEngineManager.instance.voipDataSyncHandler.onCall(method, param: param)
}
return nil
}
}