diff --git a/bin/unzip_zoom_sdk.dart b/bin/unzip_zoom_sdk.dart index fd7a57a..bf05622 100644 --- a/bin/unzip_zoom_sdk.dart +++ b/bin/unzip_zoom_sdk.dart @@ -49,7 +49,7 @@ Future<void> checkAndDownloadSDK(String location) async { if (!exists) { await downloadFile( - Uri.parse('https://www.dropbox.com/s/a5vfh2m543t15k8/MobileRTC?dl=1'), + Uri.parse('https://drive.google.com/uc?export=download&id=1PVPXEOUD4cjS_gy5cnWAQkqQA1mza0hh'), iosSDKFile); } @@ -59,7 +59,7 @@ Future<void> checkAndDownloadSDK(String location) async { if (!exists) { await downloadFile( - Uri.parse('https://www.dropbox.com/s/alk03qxiolurxf8/MobileRTC?dl=1'), + Uri.parse('https://drive.google.com/uc?export=download&id=1F4Yg4fqjf9wkYUkLtNEUorjd5CUb7_Pp'), iosSimulateSDKFile); } diff --git a/ios/Classes/SwiftFlutterZoomSdkPlugin.swift b/ios/Classes/SwiftFlutterZoomSdkPlugin.swift index 77bd151..bec7262 100644 --- a/ios/Classes/SwiftFlutterZoomSdkPlugin.swift +++ b/ios/Classes/SwiftFlutterZoomSdkPlugin.swift @@ -2,426 +2,425 @@ import Flutter import UIKit import MobileRTC -publicclass SwiftFlutterZoomSdkPlugin: NSObject, FlutterPlugin,FlutterStreamHandler , MobileRTCMeetingServiceDelegate { - -var authenticationDelegate: AuthenticationDelegate -var eventSink: FlutterEventSink? - -publicstaticfunc register(with registrar: FlutterPluginRegistrar) { -let messenger = registrar.messenger() -let channel = FlutterMethodChannel(name: "com.evilratt/zoom_sdk", binaryMessenger: messenger) -let instance = SwiftFlutterZoomSdkPlugin() - registrar.addMethodCallDelegate(instance, channel: channel) - -let eventChannel = FlutterEventChannel(name: "com.evilratt/zoom_sdk_event_stream", binaryMessenger: messenger) - eventChannel.setStreamHandler(instance) - } - -overrideinit(){ - authenticationDelegate = AuthenticationDelegate() - } - -publicfunc handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { -switch call.method { -case "init": -self.initZoom(call: call, result: result) -case "login": -self.login(call: call, result: result) -case "join": -self.joinMeeting(call: call, result: result) -case "startNormal": -self.startMeetingNormal(call: call, result: result) -case "meeting_status": -self.meetingStatus(call: call, result: result) -case "meeting_details": -self.meetingDetails(call: call, result: result) -default: - result(FlutterMethodNotImplemented) - } - } - -publicfunc onMethodCall(call: FlutterMethodCall, result: @escaping FlutterResult) { - -switch call.method { -case "init": -self.initZoom(call: call, result: result) -case "login": -self.login(call: call, result: result) -case "join": -self.joinMeeting(call: call, result: result) -case "start": -self.startMeetingNormal(call: call, result: result) -case "meeting_status": -self.meetingStatus(call: call, result: result) -case "meeting_details": -self.meetingDetails(call: call, result: result) -default: - result(FlutterMethodNotImplemented) - } - } - - //Initializing the Zoom SDK for iOS -publicfunc initZoom(call: FlutterMethodCall, result: @escaping FlutterResult) { - -let pluginBundle = Bundle(for: type(of: self)) -let pluginBundlePath = pluginBundle.bundlePath -let arguments = call.arguments as! Dictionary<String, String> - -let context = MobileRTCSDKInitContext() - context.domain = arguments["domain"]! - context.enableLog = true - context.bundleResPath = pluginBundlePath - MobileRTC.shared().initialize(context) - -let auth = MobileRTC.shared().getAuthService() - auth?.delegate = self.authenticationDelegate.onAuth(result) -iflet appKey = arguments["appKey"] { - auth?.clientKey = appKey - } -iflet appSecret = arguments["appSecret"] { - auth?.clientSecret = appSecret - } - - auth?.sdkAuth() - } - - //Perform start meeting function with logging in to the zoom account -publicfunc login(call: FlutterMethodCall, result: @escaping FlutterResult) { -let authService = MobileRTC.shared().getAuthService() - -if ((authService?.isLoggedIn()) == true) { -self.startMeeting(call:call, result:result); - }else{ -let arguments = call.arguments as! Dictionary<String, String?> -// authService? -// .login(withEmail: arguments["userId"]!!, password: arguments["userPassword"]!!, rememberMe: false) -if ((authService?.isLoggedIn()) == true) { -self.startMeeting(call:call, result:result); - } - } - } - - //Perform start meeting function with logging in to the zoom account (Only for passed meeting id) -publicfunc startMeetingNormal(call: FlutterMethodCall, result: @escaping FlutterResult) { -let authService = MobileRTC.shared().getAuthService() - -if ((authService?.isLoggedIn()) == true) { -self.startMeetingNormalInternal(call:call, result:result); - }else{ -let arguments = call.arguments as! Dictionary<String, String?> - // authService?.login(withEmail: arguments["userId"]!!, password: arguments["userPassword"]!!, rememberMe: false) -if ((authService?.isLoggedIn()) == true) { -self.startMeetingNormalInternal(call:call, result:result); - } - } - } - - //Listen to meeting status on joinning and starting the mmeting -publicfunc meetingStatus(call: FlutterMethodCall, result: FlutterResult) { - -let meetingService = MobileRTC.shared().getMeetingService() -if meetingService != nil { -let meetingState = meetingService?.getMeetingState() - result(getStateMessage(meetingState)) - } else { - result(["MEETING_STATUS_UNKNOWN", ""]) - } - } - - //Get Meeting Details Programmatically after Starting the Meeting -publicfunc meetingDetails(call: FlutterMethodCall, result: FlutterResult) { - -let meetingService = MobileRTC.shared().getMeetingService() -if meetingService != nil { -let meetingPassword = MobileRTCInviteHelper.sharedInstance().rawMeetingPassword -let meetingNumber = MobileRTCInviteHelper.sharedInstance().ongoingMeetingNumber - - result([meetingNumber, meetingPassword]) - - } else { - result(["MEETING_STATUS_UNKNOWN", "No status available"]) - } - } - - //Join Meeting with passed Meeting ID and Passcode -publicfunc joinMeeting(call: FlutterMethodCall, result: FlutterResult) { - -let meetingService = MobileRTC.shared().getMeetingService() -let meetingSettings = MobileRTC.shared().getMeetingSettings() - -if (meetingService != nil) { -let arguments = call.arguments as! Dictionary<String, String?> - - //Setting up meeting settings for zoom sdk - meetingSettings?.disableDriveMode(parseBoolean(data: arguments["disableDrive"]!, defaultValue: false)) - meetingSettings?.disableCall(in: parseBoolean(data: arguments["disableDialIn"]!, defaultValue: false)) - meetingSettings?.setAutoConnectInternetAudio(parseBoolean(data: arguments["noDisconnectAudio"]!, defaultValue: false)) - meetingSettings?.setMuteAudioWhenJoinMeeting(parseBoolean(data: arguments["noAudio"]!, defaultValue: false)) - meetingSettings?.meetingShareHidden = parseBoolean(data: arguments["disableShare"]!, defaultValue: false) - meetingSettings?.meetingInviteHidden = parseBoolean(data: arguments["disableDrive"]!, defaultValue: false) - meetingSettings?.meetingTitleHidden = parseBoolean(data:arguments["disableTitlebar"]!, defaultValue: false) -let viewopts = parseBoolean(data:arguments["viewOptions"]!, defaultValue: false) -if viewopts { - meetingSettings?.meetingTitleHidden = true - meetingSettings?.meetingPasswordHidden = true - } - - //Setting up Join Meeting parameter -let joinMeetingParameters = MobileRTCMeetingJoinParam() - - //Setting up Custom Join Meeting parameter - joinMeetingParameters.userName = arguments["userId"]!! - joinMeetingParameters.meetingNumber = arguments["meetingId"]!! - joinMeetingParameters.webinarToken="6KWye9SgmDNJpLoiE_VbrnyYr51JqYznhhIW140Aymk.DQMAAAATsesehhZYelp4UEREZlJuT3FEblZ5bktPbjZnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" - -let hasPassword = arguments["meetingPassword"]! != nil -if hasPassword { - joinMeetingParameters.password = arguments["meetingPassword"]!! - } - - //Joining the meeting and storing the response -let response = meetingService?.joinMeeting(with: joinMeetingParameters) - -iflet response = response { - print("Got response from join: \(response)") - } - result(true) - } else { - result(false) - } - } - - // Basic Start Meeting Function called on startMeeting triggered via login function -publicfunc startMeeting(call: FlutterMethodCall, result: FlutterResult) { - -let meetingService = MobileRTC.shared().getMeetingService() -let meetingSettings = MobileRTC.shared().getMeetingSettings() -let authService = MobileRTC.shared().getAuthService() - -if meetingService != nil{ -if ((authService?.isLoggedIn()) == true) { -let arguments = call.arguments as! Dictionary<String, String?> - - //Setting up meeting settings for zoom sdk - meetingSettings?.disableDriveMode(parseBoolean(data: arguments["disableDrive"]!, defaultValue: false)) - meetingSettings?.disableCall(in: parseBoolean(data: arguments["disableDialIn"]!, defaultValue: false)) - meetingSettings?.setAutoConnectInternetAudio(parseBoolean(data: arguments["noDisconnectAudio"]!, defaultValue: false)) - meetingSettings?.setMuteAudioWhenJoinMeeting(parseBoolean(data: arguments["noAudio"]!, defaultValue: false)) - meetingSettings?.meetingShareHidden = parseBoolean(data: arguments["disableShare"]!, defaultValue: false) - meetingSettings?.meetingInviteHidden = parseBoolean(data: arguments["disableDrive"]!, defaultValue: false) -let viewopts = parseBoolean(data:arguments["viewOptions"]!, defaultValue: false) -if viewopts { - meetingSettings?.meetingTitleHidden = true - meetingSettings?.meetingPasswordHidden = true - } - - //Setting up Start Meeting parameter -let startMeetingParameters = MobileRTCMeetingStartParam4LoginlUser() - - //Starting the meeting and storing the response -let response = meetingService?.startMeeting(with: startMeetingParameters) - -iflet response = response { - print("Got response from start: \(response)") - } - result(["MEETING SUCCESS", "200"]) - }else{ - result(["LOGIN REQUIRED", "001"]) - } - } else { - result(["SDK ERROR", "001"]) - } - } - - // Meeting ID passed Start Meeting Function called on startMeetingNormal triggered via startMeetingNormal function -publicfunc startMeetingNormalInternal(call: FlutterMethodCall, result: FlutterResult) { - -let meetingService = MobileRTC.shared().getMeetingService() -let meetingSettings = MobileRTC.shared().getMeetingSettings() -let authService = MobileRTC.shared().getAuthService() - -if meetingService != nil{ -if ((authService?.isLoggedIn()) == true) { -let arguments = call.arguments as! Dictionary<String, String?> - - //Setting up meeting settings for zoom sdk - meetingSettings?.disableDriveMode(parseBoolean(data: arguments["disableDrive"]!, defaultValue: false)) - meetingSettings?.disableCall(in: parseBoolean(data: arguments["disableDialIn"]!, defaultValue: false)) - meetingSettings?.setAutoConnectInternetAudio(parseBoolean(data: arguments["noDisconnectAudio"]!, defaultValue: false)) - meetingSettings?.setMuteAudioWhenJoinMeeting(parseBoolean(data: arguments["noAudio"]!, defaultValue: false)) - meetingSettings?.meetingShareHidden = parseBoolean(data: arguments["disableShare"]!, defaultValue: false) - meetingSettings?.meetingInviteHidden = parseBoolean(data: arguments["disableDrive"]!, defaultValue: false) -let viewopts = parseBoolean(data:arguments["viewOptions"]!, defaultValue: false) -if viewopts { - meetingSettings?.meetingTitleHidden = true - meetingSettings?.meetingPasswordHidden = true - } - - //Setting up Start Meeting parameter -let startMeetingParameters = MobileRTCMeetingStartParam4LoginlUser() - //Passing custom Meeting ID for start meeting - startMeetingParameters.meetingNumber = arguments["meetingId"]!! - - //Starting the meeting and storing the response -let response = meetingService?.startMeeting(with: startMeetingParameters) - -iflet response = response { - print("Got response from start: \(response)") - } - result(["MEETING SUCCESS", "200"]) - }else{ - result(["LOGIN REQUIRED", "001"]) - } - } else { - result(["SDK ERROR", "001"]) - } - } - - //Helper Function for parsing string to boolean value -privatefunc parseBoolean(data: String?, defaultValue: Bool) -> Bool { -var result: Bool - -iflet unwrappeData = data { - result = NSString(string: unwrappeData).boolValue - } else { - result = defaultValue - } -return result - } - - //Helper Function for parsing string to int value -privatefunc parseInt(data: String?, defaultValue: Int) -> Int { -var result: Int - -iflet unwrappeData = data { - result = NSString(string: unwrappeData).integerValue - } else { - result = defaultValue - } -return result - } - - -publicfunc onMeetingError(_ error: MobileRTCMeetError, message: String?) { - - } - -publicfunc getMeetErrorMessage(_ errorCode: MobileRTCMeetError) -> String { - -let message = "" -return message - } - -publicfunc onMeetingStateChange(_ state: MobileRTCMeetingState) { - -guardlet eventSink = eventSink else { -return - } - - eventSink(getStateMessage(state)) - } - - //Listen to initializing sdk events -publicfunc onListen(withArguments arguments: Any?, eventSink events: @escaping FlutterEventSink) -> FlutterError? { -self.eventSink = events - -let meetingService = MobileRTC.shared().getMeetingService() -if meetingService == nil { -return FlutterError(code: "Zoom SDK error", message: "ZoomSDK is not initialized", details: nil) - } - meetingService?.delegate = self - -returnnil - } - -publicfunc onCancel(withArguments arguments: Any?) -> FlutterError? { - eventSink = nil -returnnil - } - - //Get Meeting Status message with proper codes -privatefunc getStateMessage(_ state: MobileRTCMeetingState?) -> [String] { - -var message: [String] -switch state { -case .idle: - message = ["MEETING_STATUS_IDLE", "No meeting is running"] -break -case .connecting: - message = ["MEETING_STATUS_CONNECTING", "Connect to the meeting server"] -break -case .inMeeting: - message = ["MEETING_STATUS_INMEETING", "Meeting is ready and in process"] -break -case .webinarPromote: - message = ["MEETING_STATUS_WEBINAR_PROMOTE", "Upgrade the attendees to panelist in webinar"] -break -case .webinarDePromote: - message = ["MEETING_STATUS_WEBINAR_DEPROMOTE", "Demote the attendees from the panelist"] -break -case .disconnecting: - message = ["MEETING_STATUS_DISCONNECTING", "Disconnect the meeting server, leave meeting status"] -break; -case .ended: - message = ["MEETING_STATUS_ENDED", "Meeting ends"] -break; -case .failed: - message = ["MEETING_STATUS_FAILED", "Failed to connect the meeting server"] -break; -case .reconnecting: - message = ["MEETING_STATUS_RECONNECTING", "Reconnecting meeting server status"] -break; -case .waitingForHost: - message = ["MEETING_STATUS_WAITINGFORHOST", "Waiting for the host to start the meeting"] -break; -case .inWaitingRoom: - message = ["MEETING_STATUS_IN_WAITING_ROOM", "Participants who join the meeting before the start are in the waiting room"] -break; -default: - message = ["MEETING_STATUS_UNKNOWN", "'(state?.rawValue ?? 9999)'"] - } -return message - } - } - - //Zoom SDK Authentication Listner -publicclass AuthenticationDelegate: NSObject, MobileRTCAuthDelegate { - -privatevar result: FlutterResult? - - //Zoom SDK Authentication Listner - On Auth get result -publicfunc onAuth(_ result: FlutterResult?) -> AuthenticationDelegate { -self.result = result -returnself - } - - //Zoom SDK Authentication Listner - On MobileRTCAuth get result -publicfunc onMobileRTCAuthReturn(_ returnValue: MobileRTCAuthError) { - -if returnValue == .success { -self.result?([0, 0]) - } else { -self.result?([1, 0]) - } - -self.result = nil - } - - //Zoom SDK Authentication Listner - On onMobileRTCLoginReturn get status -publicfunc onMobileRTCLoginReturn(_ returnValue: Int){ - - } - - //Zoom SDK Authentication Listner - On onMobileRTCLogoutReturn get message -publicfunc onMobileRTCLogoutReturn(_ returnValue: Int) { - - } - - //Zoom SDK Authentication Listner - On getAuthErrorMessage get message -publicfunc getAuthErrorMessage(_ errorCode: MobileRTCAuthError) -> String { - -let message = "" - -return message - } - } +public class SwiftFlutterZoomSdkPlugin: NSObject, FlutterPlugin,FlutterStreamHandler , MobileRTCMeetingServiceDelegate { + + var authenticationDelegate: AuthenticationDelegate + var eventSink: FlutterEventSink? + + public static func register(with registrar: FlutterPluginRegistrar) { + let messenger = registrar.messenger() + let channel = FlutterMethodChannel(name: "com.evilratt/zoom_sdk", binaryMessenger: messenger) + let instance = SwiftFlutterZoomSdkPlugin() + registrar.addMethodCallDelegate(instance, channel: channel) + + let eventChannel = FlutterEventChannel(name: "com.evilratt/zoom_sdk_event_stream", binaryMessenger: messenger) + eventChannel.setStreamHandler(instance) + } + + override init(){ + authenticationDelegate = AuthenticationDelegate() + } + + public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) { + switch call.method { + case "init": + self.initZoom(call: call, result: result) + case "login": + self.login(call: call, result: result) + case "join": + self.joinMeeting(call: call, result: result) + case "startNormal": + self.startMeetingNormal(call: call, result: result) + case "meeting_status": + self.meetingStatus(call: call, result: result) + case "meeting_details": + self.meetingDetails(call: call, result: result) + default: + result(FlutterMethodNotImplemented) + } + } + + public func onMethodCall(call: FlutterMethodCall, result: @escaping FlutterResult) { + + switch call.method { + case "init": + self.initZoom(call: call, result: result) + case "login": + self.login(call: call, result: result) + case "join": + self.joinMeeting(call: call, result: result) + case "start": + self.startMeetingNormal(call: call, result: result) + case "meeting_status": + self.meetingStatus(call: call, result: result) + case "meeting_details": + self.meetingDetails(call: call, result: result) + default: + result(FlutterMethodNotImplemented) + } + } + + //Initializing the Zoom SDK for iOS + public func initZoom(call: FlutterMethodCall, result: @escaping FlutterResult) { + + let pluginBundle = Bundle(for: type(of: self)) + let pluginBundlePath = pluginBundle.bundlePath + let arguments = call.arguments as! Dictionary<String, String> + + let context = MobileRTCSDKInitContext() + context.domain = arguments["domain"]! + context.enableLog = true + context.bundleResPath = pluginBundlePath + MobileRTC.shared().initialize(context) + + let auth = MobileRTC.shared().getAuthService() + auth?.delegate = self.authenticationDelegate.onAuth(result) + if let appKey = arguments["appKey"] { + auth?.clientKey = appKey + } + if let appSecret = arguments["appSecret"] { + auth?.clientSecret = appSecret + } + + auth?.sdkAuth() + } + + //Perform start meeting function with logging in to the zoom account + public func login(call: FlutterMethodCall, result: @escaping FlutterResult) { + let authService = MobileRTC.shared().getAuthService() + + if ((authService?.isLoggedIn()) == true) { + self.startMeeting(call:call, result:result); + }else{ + let arguments = call.arguments as! Dictionary<String, String?> + authService?.login(withEmail: arguments["userId"]!!, password: arguments["userPassword"]!!, rememberMe: false) + if ((authService?.isLoggedIn()) == true) { + self.startMeeting(call:call, result:result); + } + } + } + + //Perform start meeting function with logging in to the zoom account (Only for passed meeting id) + public func startMeetingNormal(call: FlutterMethodCall, result: @escaping FlutterResult) { + let authService = MobileRTC.shared().getAuthService() + + if ((authService?.isLoggedIn()) == true) { + self.startMeetingNormalInternal(call:call, result:result); + }else{ + let arguments = call.arguments as! Dictionary<String, String?> + authService?.login(withEmail: arguments["userId"]!!, password: arguments["userPassword"]!!, rememberMe: false) + if ((authService?.isLoggedIn()) == true) { + self.startMeetingNormalInternal(call:call, result:result); + } + } + } + + //Listen to meeting status on joinning and starting the mmeting + public func meetingStatus(call: FlutterMethodCall, result: FlutterResult) { + + let meetingService = MobileRTC.shared().getMeetingService() + if meetingService != nil { + let meetingState = meetingService?.getMeetingState() + result(getStateMessage(meetingState)) + } else { + result(["MEETING_STATUS_UNKNOWN", ""]) + } + } + + //Get Meeting Details Programmatically after Starting the Meeting + public func meetingDetails(call: FlutterMethodCall, result: FlutterResult) { + + let meetingService = MobileRTC.shared().getMeetingService() + if meetingService != nil { + let meetingPassword = MobileRTCInviteHelper.sharedInstance().rawMeetingPassword + let meetingNumber = MobileRTCInviteHelper.sharedInstance().ongoingMeetingNumber + + result([meetingNumber, meetingPassword]) + + } else { + result(["MEETING_STATUS_UNKNOWN", "No status available"]) + } + } + + //Join Meeting with passed Meeting ID and Passcode + public func joinMeeting(call: FlutterMethodCall, result: FlutterResult) { + + let meetingService = MobileRTC.shared().getMeetingService() + let meetingSettings = MobileRTC.shared().getMeetingSettings() + + if (meetingService != nil) { + let arguments = call.arguments as! Dictionary<String, String?> + + //Setting up meeting settings for zoom sdk + meetingSettings?.disableDriveMode(parseBoolean(data: arguments["disableDrive"]!, defaultValue: false)) + meetingSettings?.disableCall(in: parseBoolean(data: arguments["disableDialIn"]!, defaultValue: false)) + meetingSettings?.setAutoConnectInternetAudio(parseBoolean(data: arguments["noDisconnectAudio"]!, defaultValue: false)) + meetingSettings?.setMuteAudioWhenJoinMeeting(parseBoolean(data: arguments["noAudio"]!, defaultValue: false)) + meetingSettings?.meetingShareHidden = parseBoolean(data: arguments["disableShare"]!, defaultValue: false) + meetingSettings?.meetingInviteHidden = parseBoolean(data: arguments["disableDrive"]!, defaultValue: false) + meetingSettings?.meetingTitleHidden = parseBoolean(data:arguments["disableTitlebar"]!, defaultValue: false) + let viewopts = parseBoolean(data:arguments["viewOptions"]!, defaultValue: false) + if viewopts { + meetingSettings?.meetingTitleHidden = true + meetingSettings?.meetingPasswordHidden = true + } + + //Setting up Join Meeting parameter + let joinMeetingParameters = MobileRTCMeetingJoinParam() + + //Setting up Custom Join Meeting parameter + joinMeetingParameters.userName = arguments["userId"]!! + joinMeetingParameters.meetingNumber = arguments["meetingId"]!! + joinMeetingParameters.webinarToken="6KWye9SgmDNJpLoiE_VbrnyYr51JqYznhhIW140Aymk.DQMAAAATsesehhZYelp4UEREZlJuT3FEblZ5bktPbjZnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + let hasPassword = arguments["meetingPassword"]! != nil + if hasPassword { + joinMeetingParameters.password = arguments["meetingPassword"]!! + } + + + //Joining the meeting and storing the response + let response = meetingService?.joinMeeting(with: joinMeetingParameters) + + if let response = response { + print("Got response from join: \(response)") + } + result(true) + } else { + result(false) + } + } + + // Basic Start Meeting Function called on startMeeting triggered via login function + public func startMeeting(call: FlutterMethodCall, result: FlutterResult) { + + let meetingService = MobileRTC.shared().getMeetingService() + let meetingSettings = MobileRTC.shared().getMeetingSettings() + let authService = MobileRTC.shared().getAuthService() + + if meetingService != nil{ + if ((authService?.isLoggedIn()) == true) { + let arguments = call.arguments as! Dictionary<String, String?> + + //Setting up meeting settings for zoom sdk + meetingSettings?.disableDriveMode(parseBoolean(data: arguments["disableDrive"]!, defaultValue: false)) + meetingSettings?.disableCall(in: parseBoolean(data: arguments["disableDialIn"]!, defaultValue: false)) + meetingSettings?.setAutoConnectInternetAudio(parseBoolean(data: arguments["noDisconnectAudio"]!, defaultValue: false)) + meetingSettings?.setMuteAudioWhenJoinMeeting(parseBoolean(data: arguments["noAudio"]!, defaultValue: false)) + meetingSettings?.meetingShareHidden = parseBoolean(data: arguments["disableShare"]!, defaultValue: false) + meetingSettings?.meetingInviteHidden = parseBoolean(data: arguments["disableDrive"]!, defaultValue: false) + let viewopts = parseBoolean(data:arguments["viewOptions"]!, defaultValue: false) + if viewopts { + meetingSettings?.meetingTitleHidden = true + meetingSettings?.meetingPasswordHidden = true + } + + //Setting up Start Meeting parameter + let startMeetingParameters = MobileRTCMeetingStartParam4LoginlUser() + + //Starting the meeting and storing the response + let response = meetingService?.startMeeting(with: startMeetingParameters) + + if let response = response { + print("Got response from start: \(response)") + } + result(["MEETING SUCCESS", "200"]) + }else{ + result(["LOGIN REQUIRED", "001"]) + } + } else { + result(["SDK ERROR", "001"]) + } + } + + // Meeting ID passed Start Meeting Function called on startMeetingNormal triggered via startMeetingNormal function + public func startMeetingNormalInternal(call: FlutterMethodCall, result: FlutterResult) { + + let meetingService = MobileRTC.shared().getMeetingService() + let meetingSettings = MobileRTC.shared().getMeetingSettings() + let authService = MobileRTC.shared().getAuthService() + + if meetingService != nil{ + if ((authService?.isLoggedIn()) == true) { + let arguments = call.arguments as! Dictionary<String, String?> + + //Setting up meeting settings for zoom sdk + meetingSettings?.disableDriveMode(parseBoolean(data: arguments["disableDrive"]!, defaultValue: false)) + meetingSettings?.disableCall(in: parseBoolean(data: arguments["disableDialIn"]!, defaultValue: false)) + meetingSettings?.setAutoConnectInternetAudio(parseBoolean(data: arguments["noDisconnectAudio"]!, defaultValue: false)) + meetingSettings?.setMuteAudioWhenJoinMeeting(parseBoolean(data: arguments["noAudio"]!, defaultValue: false)) + meetingSettings?.meetingShareHidden = parseBoolean(data: arguments["disableShare"]!, defaultValue: false) + meetingSettings?.meetingInviteHidden = parseBoolean(data: arguments["disableDrive"]!, defaultValue: false) + let viewopts = parseBoolean(data:arguments["viewOptions"]!, defaultValue: false) + if viewopts { + meetingSettings?.meetingTitleHidden = true + meetingSettings?.meetingPasswordHidden = true + } + + //Setting up Start Meeting parameter + let startMeetingParameters = MobileRTCMeetingStartParam4LoginlUser() + //Passing custom Meeting ID for start meeting + startMeetingParameters.meetingNumber = arguments["meetingId"]!! + + //Starting the meeting and storing the response + let response = meetingService?.startMeeting(with: startMeetingParameters) + + if let response = response { + print("Got response from start: \(response)") + } + result(["MEETING SUCCESS", "200"]) + }else{ + result(["LOGIN REQUIRED", "001"]) + } + } else { + result(["SDK ERROR", "001"]) + } + } + + //Helper Function for parsing string to boolean value + private func parseBoolean(data: String?, defaultValue: Bool) -> Bool { + var result: Bool + + if let unwrappeData = data { + result = NSString(string: unwrappeData).boolValue + } else { + result = defaultValue + } + return result + } + + //Helper Function for parsing string to int value + private func parseInt(data: String?, defaultValue: Int) -> Int { + var result: Int + + if let unwrappeData = data { + result = NSString(string: unwrappeData).integerValue + } else { + result = defaultValue + } + return result + } + + + public func onMeetingError(_ error: MobileRTCMeetError, message: String?) { + + } + + public func getMeetErrorMessage(_ errorCode: MobileRTCMeetError) -> String { + + let message = "" + return message + } + + public func onMeetingStateChange(_ state: MobileRTCMeetingState) { + + guard let eventSink = eventSink else { + return + } + + eventSink(getStateMessage(state)) + } + + //Listen to initializing sdk events + public func onListen(withArguments arguments: Any?, eventSink events: @escaping FlutterEventSink) -> FlutterError? { + self.eventSink = events + + let meetingService = MobileRTC.shared().getMeetingService() + if meetingService == nil { + return FlutterError(code: "Zoom SDK error", message: "ZoomSDK is not initialized", details: nil) + } + meetingService?.delegate = self + + return nil + } + + public func onCancel(withArguments arguments: Any?) -> FlutterError? { + eventSink = nil + return nil + } + + //Get Meeting Status message with proper codes + private func getStateMessage(_ state: MobileRTCMeetingState?) -> [String] { + + var message: [String] + switch state { + case .idle: + message = ["MEETING_STATUS_IDLE", "No meeting is running"] + break + case .connecting: + message = ["MEETING_STATUS_CONNECTING", "Connect to the meeting server"] + break + case .inMeeting: + message = ["MEETING_STATUS_INMEETING", "Meeting is ready and in process"] + break + case .webinarPromote: + message = ["MEETING_STATUS_WEBINAR_PROMOTE", "Upgrade the attendees to panelist in webinar"] + break + case .webinarDePromote: + message = ["MEETING_STATUS_WEBINAR_DEPROMOTE", "Demote the attendees from the panelist"] + break + case .disconnecting: + message = ["MEETING_STATUS_DISCONNECTING", "Disconnect the meeting server, leave meeting status"] + break; + case .ended: + message = ["MEETING_STATUS_ENDED", "Meeting ends"] + break; + case .failed: + message = ["MEETING_STATUS_FAILED", "Failed to connect the meeting server"] + break; + case .reconnecting: + message = ["MEETING_STATUS_RECONNECTING", "Reconnecting meeting server status"] + break; + case .waitingForHost: + message = ["MEETING_STATUS_WAITINGFORHOST", "Waiting for the host to start the meeting"] + break; + case .inWaitingRoom: + message = ["MEETING_STATUS_IN_WAITING_ROOM", "Participants who join the meeting before the start are in the waiting room"] + break; + default: + message = ["MEETING_STATUS_UNKNOWN", "'(state?.rawValue ?? 9999)'"] + } + return message + } + } + + //Zoom SDK Authentication Listner + public class AuthenticationDelegate: NSObject, MobileRTCAuthDelegate { + + private var result: FlutterResult? + + //Zoom SDK Authentication Listner - On Auth get result + public func onAuth(_ result: FlutterResult?) -> AuthenticationDelegate { + self.result = result + return self + } + + //Zoom SDK Authentication Listner - On MobileRTCAuth get result + public func onMobileRTCAuthReturn(_ returnValue: MobileRTCAuthError) { + + if returnValue == .success { + self.result?([0, 0]) + } else { + self.result?([1, 0]) + } + + self.result = nil + } + + //Zoom SDK Authentication Listner - On onMobileRTCLoginReturn get status + public func onMobileRTCLoginReturn(_ returnValue: Int){ + + } + + //Zoom SDK Authentication Listner - On onMobileRTCLogoutReturn get message + public func onMobileRTCLogoutReturn(_ returnValue: Int) { + + } + + //Zoom SDK Authentication Listner - On getAuthErrorMessage get message + public func getAuthErrorMessage(_ errorCode: MobileRTCAuthError) -> String { + + let message = "" + + return message + } + } diff --git a/ios/MobileRTC.xcframework/ios-arm64_armv7/MobileRTC.framework/MobileRTC b/ios/MobileRTC.xcframework/ios-arm64_armv7/MobileRTC.framework/MobileRTC deleted file mode 100644 index 3ad9b5b..0000000 Binary files a/ios/MobileRTC.xcframework/ios-arm64_armv7/MobileRTC.framework/MobileRTC and /dev/null differ