@100mslive/react-native-hms 1.4.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/build.gradle +3 -2
- package/android/src/main/java/com/reactnativehmssdk/HMSDecoder.kt +189 -55
- package/android/src/main/java/com/reactnativehmssdk/HMSHelper.kt +1 -0
- package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +94 -38
- package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +446 -107
- package/android/src/main/java/com/reactnativehmssdk/HMSSDKViewManager.kt +5 -0
- package/android/src/main/java/com/reactnativehmssdk/HMSView.kt +42 -25
- package/android/src/main/res/layout/hms_view.xml +2 -2
- package/ios/HMSConstants.swift +33 -0
- package/ios/HMSDecoder.swift +372 -157
- package/ios/HMSHelper.swift +44 -7
- package/ios/HMSManager.m +17 -2
- package/ios/HMSManager.swift +177 -75
- package/ios/HMSRNSDK.swift +641 -199
- package/ios/HMSView.m +1 -0
- package/ios/HMSView.swift +21 -19
- package/lib/commonjs/classes/HMSAudioTrackSettings.js +14 -0
- package/lib/commonjs/classes/HMSAudioTrackSettings.js.map +1 -1
- package/lib/commonjs/classes/HMSCameraControl.js +28 -0
- package/lib/commonjs/classes/HMSCameraControl.js.map +1 -0
- package/lib/commonjs/classes/HMSEncoder.js +97 -14
- package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
- package/lib/commonjs/classes/HMSIOSAudioMode.js +13 -0
- package/lib/commonjs/classes/HMSIOSAudioMode.js.map +1 -0
- package/lib/commonjs/classes/HMSLayer.js +14 -0
- package/lib/commonjs/classes/HMSLayer.js.map +1 -0
- package/lib/commonjs/classes/HMSLocalVideoStats.js +11 -0
- package/lib/commonjs/classes/HMSLocalVideoStats.js.map +1 -1
- package/lib/commonjs/classes/HMSPeer.js +1 -1
- package/lib/commonjs/classes/HMSPeer.js.map +1 -1
- package/lib/commonjs/classes/HMSPublishSettings.js +2 -0
- package/lib/commonjs/classes/HMSPublishSettings.js.map +1 -1
- package/lib/commonjs/classes/HMSQualityLimitationReason.js +16 -0
- package/lib/commonjs/classes/HMSQualityLimitationReason.js.map +1 -0
- package/lib/commonjs/classes/HMSQualityLimitationReasons.js +27 -0
- package/lib/commonjs/classes/HMSQualityLimitationReasons.js.map +1 -0
- package/lib/commonjs/classes/HMSRemotePeer.js.map +1 -1
- package/lib/commonjs/classes/HMSRemoteVideoTrack.js +39 -3
- package/lib/commonjs/classes/HMSRemoteVideoTrack.js.map +1 -1
- package/lib/commonjs/classes/HMSRoom.js +4 -0
- package/lib/commonjs/classes/HMSRoom.js.map +1 -1
- package/lib/commonjs/classes/HMSRoomUpdate.js +1 -0
- package/lib/commonjs/classes/HMSRoomUpdate.js.map +1 -1
- package/lib/commonjs/classes/HMSSDK.js +82 -45
- package/lib/commonjs/classes/HMSSDK.js.map +1 -1
- package/lib/commonjs/classes/HMSSessionStore.js +173 -0
- package/lib/commonjs/classes/HMSSessionStore.js.map +1 -0
- package/lib/commonjs/classes/HMSSimulcastLayerDefinition.js +19 -0
- package/lib/commonjs/classes/HMSSimulcastLayerDefinition.js.map +1 -0
- package/lib/commonjs/classes/HMSSimulcastLayerSettingsPolicy.js +23 -0
- package/lib/commonjs/classes/HMSSimulcastLayerSettingsPolicy.js.map +1 -0
- package/lib/commonjs/classes/HMSSimulcastSettings.js +5 -4
- package/lib/commonjs/classes/HMSSimulcastSettings.js.map +1 -1
- package/lib/commonjs/classes/HMSSimulcastSettingsPolicy.js +17 -0
- package/lib/commonjs/classes/HMSSimulcastSettingsPolicy.js.map +1 -0
- package/lib/commonjs/classes/HMSSubscribeDegradationPolicy.js +21 -0
- package/lib/commonjs/classes/HMSSubscribeDegradationPolicy.js.map +1 -0
- package/lib/commonjs/classes/HMSSubscribeSettings.js +2 -0
- package/lib/commonjs/classes/HMSSubscribeSettings.js.map +1 -1
- package/lib/commonjs/classes/HMSUpdateListenerActions.js +8 -0
- package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
- package/lib/commonjs/classes/HMSVideoResolution.js.map +1 -1
- package/lib/commonjs/classes/HMSVideoTrackSettings.js +5 -0
- package/lib/commonjs/classes/HMSVideoTrackSettings.js.map +1 -1
- package/lib/commonjs/classes/HmsView.js +2 -0
- package/lib/commonjs/classes/HmsView.js.map +1 -1
- package/lib/commonjs/index.js +72 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/utils/emitter/EventEmitter.js +162 -0
- package/lib/commonjs/utils/emitter/EventEmitter.js.map +1 -0
- package/lib/commonjs/utils/emitter/_EmitterSubscription.js +46 -0
- package/lib/commonjs/utils/emitter/_EmitterSubscription.js.map +1 -0
- package/lib/commonjs/utils/emitter/_EventSubscription.js +36 -0
- package/lib/commonjs/utils/emitter/_EventSubscription.js.map +1 -0
- package/lib/commonjs/utils/emitter/_EventSubscriptionVendor.js +90 -0
- package/lib/commonjs/utils/emitter/_EventSubscriptionVendor.js.map +1 -0
- package/lib/commonjs/utils/index.js +17 -0
- package/lib/commonjs/utils/index.js.map +1 -0
- package/lib/module/classes/HMSAudioTrackSettings.js +14 -0
- package/lib/module/classes/HMSAudioTrackSettings.js.map +1 -1
- package/lib/module/classes/HMSCameraControl.js +21 -0
- package/lib/module/classes/HMSCameraControl.js.map +1 -0
- package/lib/module/classes/HMSEncoder.js +97 -14
- package/lib/module/classes/HMSEncoder.js.map +1 -1
- package/lib/module/classes/HMSIOSAudioMode.js +6 -0
- package/lib/module/classes/HMSIOSAudioMode.js.map +1 -0
- package/lib/module/classes/HMSLayer.js +7 -0
- package/lib/module/classes/HMSLayer.js.map +1 -0
- package/lib/module/classes/HMSLocalVideoStats.js +11 -0
- package/lib/module/classes/HMSLocalVideoStats.js.map +1 -1
- package/lib/module/classes/HMSPeer.js +1 -1
- package/lib/module/classes/HMSPeer.js.map +1 -1
- package/lib/module/classes/HMSPublishSettings.js +2 -0
- package/lib/module/classes/HMSPublishSettings.js.map +1 -1
- package/lib/module/classes/HMSQualityLimitationReason.js +9 -0
- package/lib/module/classes/HMSQualityLimitationReason.js.map +1 -0
- package/lib/module/classes/HMSQualityLimitationReasons.js +20 -0
- package/lib/module/classes/HMSQualityLimitationReasons.js.map +1 -0
- package/lib/module/classes/HMSRemotePeer.js.map +1 -1
- package/lib/module/classes/HMSRemoteVideoTrack.js +39 -3
- package/lib/module/classes/HMSRemoteVideoTrack.js.map +1 -1
- package/lib/module/classes/HMSRoom.js +4 -0
- package/lib/module/classes/HMSRoom.js.map +1 -1
- package/lib/module/classes/HMSRoomUpdate.js +1 -0
- package/lib/module/classes/HMSRoomUpdate.js.map +1 -1
- package/lib/module/classes/HMSSDK.js +83 -45
- package/lib/module/classes/HMSSDK.js.map +1 -1
- package/lib/module/classes/HMSSessionStore.js +166 -0
- package/lib/module/classes/HMSSessionStore.js.map +1 -0
- package/lib/module/classes/HMSSimulcastLayerDefinition.js +12 -0
- package/lib/module/classes/HMSSimulcastLayerDefinition.js.map +1 -0
- package/lib/module/classes/HMSSimulcastLayerSettingsPolicy.js +16 -0
- package/lib/module/classes/HMSSimulcastLayerSettingsPolicy.js.map +1 -0
- package/lib/module/classes/HMSSimulcastSettings.js +5 -4
- package/lib/module/classes/HMSSimulcastSettings.js.map +1 -1
- package/lib/module/classes/HMSSimulcastSettingsPolicy.js +10 -0
- package/lib/module/classes/HMSSimulcastSettingsPolicy.js.map +1 -0
- package/lib/module/classes/HMSSubscribeDegradationPolicy.js +14 -0
- package/lib/module/classes/HMSSubscribeDegradationPolicy.js.map +1 -0
- package/lib/module/classes/HMSSubscribeSettings.js +2 -0
- package/lib/module/classes/HMSSubscribeSettings.js.map +1 -1
- package/lib/module/classes/HMSUpdateListenerActions.js +8 -0
- package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
- package/lib/module/classes/HMSVideoResolution.js.map +1 -1
- package/lib/module/classes/HMSVideoTrackSettings.js +5 -0
- package/lib/module/classes/HMSVideoTrackSettings.js.map +1 -1
- package/lib/module/classes/HmsView.js +2 -0
- package/lib/module/classes/HmsView.js.map +1 -1
- package/lib/module/index.js +6 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/utils/emitter/EventEmitter.js +151 -0
- package/lib/module/utils/emitter/EventEmitter.js.map +1 -0
- package/lib/module/utils/emitter/_EmitterSubscription.js +39 -0
- package/lib/module/utils/emitter/_EmitterSubscription.js.map +1 -0
- package/lib/module/utils/emitter/_EventSubscription.js +29 -0
- package/lib/module/utils/emitter/_EventSubscription.js.map +1 -0
- package/lib/module/utils/emitter/_EventSubscriptionVendor.js +83 -0
- package/lib/module/utils/emitter/_EventSubscriptionVendor.js.map +1 -0
- package/lib/module/utils/index.js +2 -0
- package/lib/module/utils/index.js.map +1 -0
- package/lib/typescript/classes/HMSAudioTrackSettings.d.ts +14 -0
- package/lib/typescript/classes/HMSCameraControl.d.ts +9 -0
- package/lib/typescript/classes/HMSEncoder.d.ts +13 -1
- package/lib/typescript/classes/HMSIOSAudioMode.d.ts +4 -0
- package/lib/typescript/classes/HMSLayer.d.ts +5 -0
- package/lib/typescript/classes/HMSLocalVideoStats.d.ts +6 -0
- package/lib/typescript/classes/HMSPeer.d.ts +1 -1
- package/lib/typescript/classes/HMSPublishSettings.d.ts +3 -0
- package/lib/typescript/classes/HMSQualityLimitationReason.d.ts +7 -0
- package/lib/typescript/classes/HMSQualityLimitationReasons.d.ts +17 -0
- package/lib/typescript/classes/HMSRemotePeer.d.ts +0 -1
- package/lib/typescript/classes/HMSRemoteVideoTrack.d.ts +6 -2
- package/lib/typescript/classes/HMSRoomUpdate.d.ts +2 -1
- package/lib/typescript/classes/HMSSDK.d.ts +21 -31
- package/lib/typescript/classes/HMSSessionStore.d.ts +63 -0
- package/lib/typescript/classes/HMSSimulcastLayerDefinition.d.ts +10 -0
- package/lib/typescript/classes/HMSSimulcastLayerSettingsPolicy.d.ts +12 -0
- package/lib/typescript/classes/HMSSimulcastSettings.d.ts +7 -3
- package/lib/typescript/classes/HMSSimulcastSettingsPolicy.d.ts +7 -0
- package/lib/typescript/classes/HMSSubscribeDegradationPolicy.d.ts +10 -0
- package/lib/typescript/classes/HMSSubscribeSettings.d.ts +5 -2
- package/lib/typescript/classes/HMSUpdateListenerActions.d.ts +9 -1
- package/lib/typescript/classes/HMSVideoResolution.d.ts +2 -2
- package/lib/typescript/classes/HMSVideoTrackSettings.d.ts +5 -0
- package/lib/typescript/classes/HmsView.d.ts +2 -2
- package/lib/typescript/index.d.ts +7 -0
- package/lib/typescript/utils/emitter/EventEmitter.d.ts +91 -0
- package/lib/typescript/utils/emitter/_EmitterSubscription.d.ts +29 -0
- package/lib/typescript/utils/emitter/_EventSubscription.d.ts +19 -0
- package/lib/typescript/utils/emitter/_EventSubscriptionVendor.d.ts +44 -0
- package/lib/typescript/utils/index.d.ts +1 -0
- package/package.json +21 -2
- package/sdk-versions.json +3 -3
- package/src/classes/HMSAudioTrackSettings.ts +16 -0
- package/src/classes/HMSCameraControl.ts +21 -0
- package/src/classes/HMSEncoder.ts +126 -11
- package/src/classes/HMSIOSAudioMode.ts +4 -0
- package/src/classes/HMSLayer.ts +5 -0
- package/src/classes/HMSLocalVideoStats.ts +21 -0
- package/src/classes/HMSPeer.ts +1 -1
- package/src/classes/HMSPublishSettings.ts +4 -0
- package/src/classes/HMSQualityLimitationReason.ts +7 -0
- package/src/classes/HMSQualityLimitationReasons.ts +27 -0
- package/src/classes/HMSRemotePeer.ts +0 -1
- package/src/classes/HMSRemoteVideoTrack.ts +52 -4
- package/src/classes/HMSRoom.ts +2 -0
- package/src/classes/HMSRoomUpdate.ts +1 -0
- package/src/classes/HMSSDK.tsx +124 -52
- package/src/classes/HMSSessionStore.ts +209 -0
- package/src/classes/HMSSimulcastLayerDefinition.ts +12 -0
- package/src/classes/HMSSimulcastLayerSettingsPolicy.ts +18 -0
- package/src/classes/HMSSimulcastSettings.ts +12 -3
- package/src/classes/HMSSimulcastSettingsPolicy.ts +9 -0
- package/src/classes/HMSSubscribeDegradationPolicy.ts +15 -0
- package/src/classes/HMSSubscribeSettings.ts +10 -2
- package/src/classes/HMSUpdateListenerActions.ts +8 -0
- package/src/classes/HMSVideoResolution.ts +1 -1
- package/src/classes/HMSVideoTrackSettings.ts +5 -0
- package/src/classes/HmsView.tsx +5 -1
- package/src/index.ts +10 -0
- package/src/utils/emitter/EventEmitter.ts +160 -0
- package/src/utils/emitter/_EmitterSubscription.ts +44 -0
- package/src/utils/emitter/_EventSubscription.ts +28 -0
- package/src/utils/emitter/_EventSubscriptionVendor.ts +89 -0
- package/src/utils/index.ts +1 -0
package/ios/HMSRNSDK.swift
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
//
|
|
2
2
|
// Hmssdk.swift
|
|
3
|
-
//
|
|
3
|
+
// HMSSDK
|
|
4
4
|
//
|
|
5
|
-
// Copyright ©
|
|
5
|
+
// Copyright © 2023 100ms. All rights reserved.
|
|
6
6
|
//
|
|
7
7
|
|
|
8
8
|
import Foundation
|
|
@@ -16,7 +16,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
16
16
|
var recentRoleChangeRequest: HMSRoleChangeRequest?
|
|
17
17
|
var delegate: HMSManager?
|
|
18
18
|
var id: String = "12345"
|
|
19
|
-
var recentPreviewTracks: [HMSTrack]? = []
|
|
20
19
|
private var reconnectingStage: Bool = false
|
|
21
20
|
private var preferredExtension: String?
|
|
22
21
|
private var systemBroadcastPicker: RPSystemBroadcastPickerView?
|
|
@@ -24,27 +23,10 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
24
23
|
private var stopScreenshareResolve: RCTPromiseResolveBlock?
|
|
25
24
|
private var isScreenShared: Bool? = false
|
|
26
25
|
private var previewInProgress = false
|
|
27
|
-
private var rtcStatsAttached = false
|
|
28
26
|
private var networkQualityUpdatesAttached = false
|
|
29
27
|
private var eventsEnableStatus: [String: Bool] = [:]
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
let ON_JOIN = "ON_JOIN"
|
|
33
|
-
let ON_ROOM_UPDATE = "ON_ROOM_UPDATE"
|
|
34
|
-
let ON_PEER_UPDATE = "3"
|
|
35
|
-
let ON_TRACK_UPDATE = "ON_TRACK_UPDATE"
|
|
36
|
-
let ON_ROLE_CHANGE_REQUEST = "ON_ROLE_CHANGE_REQUEST"
|
|
37
|
-
let ON_REMOVED_FROM_ROOM = "ON_REMOVED_FROM_ROOM"
|
|
38
|
-
let ON_ERROR = "ON_ERROR"
|
|
39
|
-
let ON_MESSAGE = "ON_MESSAGE"
|
|
40
|
-
let ON_SPEAKER = "ON_SPEAKER"
|
|
41
|
-
let RECONNECTING = "RECONNECTING"
|
|
42
|
-
let RECONNECTED = "RECONNECTED"
|
|
43
|
-
let ON_RTC_STATS = "ON_RTC_STATS"
|
|
44
|
-
let ON_LOCAL_AUDIO_STATS = "ON_LOCAL_AUDIO_STATS"
|
|
45
|
-
let ON_LOCAL_VIDEO_STATS = "ON_LOCAL_VIDEO_STATS"
|
|
46
|
-
let ON_REMOTE_AUDIO_STATS = "ON_REMOTE_AUDIO_STATS"
|
|
47
|
-
let ON_REMOTE_VIDEO_STATS = "ON_REMOTE_VIDEO_STATS"
|
|
28
|
+
private var sessionStore: HMSSessionStore?
|
|
29
|
+
private var sessionStoreChangeObservers = [String: NSObjectProtocol]()
|
|
48
30
|
|
|
49
31
|
// MARK: - Setup
|
|
50
32
|
init(data: NSDictionary?, delegate manager: HMSManager?, uid id: String) {
|
|
@@ -68,8 +50,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
68
50
|
func preview(_ credentials: NSDictionary) {
|
|
69
51
|
|
|
70
52
|
guard !previewInProgress else {
|
|
71
|
-
if eventsEnableStatus[ON_ERROR] == true {
|
|
72
|
-
delegate?.emitEvent(ON_ERROR, ["error": ["code": 5000, "description": "Preview is in progress", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
53
|
+
if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
54
|
+
delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 5000, "description": "Preview is in progress", "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
|
|
73
55
|
}
|
|
74
56
|
return
|
|
75
57
|
}
|
|
@@ -112,32 +94,30 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
112
94
|
if let extractedRole = roleObj {
|
|
113
95
|
hms?.preview(role: extractedRole, completion: { tracks, error in
|
|
114
96
|
if error != nil {
|
|
115
|
-
if eventsEnableStatus[ON_ERROR] == true {
|
|
116
|
-
delegate?.emitEvent(ON_ERROR, ["error": HMSDecoder.getError(error), "id": id])
|
|
97
|
+
if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
98
|
+
delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": id])
|
|
117
99
|
}
|
|
118
100
|
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
119
101
|
return
|
|
120
102
|
}
|
|
121
|
-
self.recentPreviewTracks = tracks
|
|
122
103
|
|
|
123
104
|
let decodedTracks = HMSDecoder.getAllTracks(tracks ?? [])
|
|
124
105
|
|
|
125
|
-
resolve?(["success": true, "tracks": decodedTracks])
|
|
106
|
+
resolve?(["success": true, "tracks": decodedTracks] as [String: Any])
|
|
126
107
|
return
|
|
127
108
|
})
|
|
128
109
|
}
|
|
129
110
|
}
|
|
130
111
|
|
|
131
112
|
func cancelPreview() {
|
|
132
|
-
self.recentPreviewTracks = []
|
|
133
113
|
hms?.cancelPreview()
|
|
134
114
|
}
|
|
135
115
|
|
|
136
116
|
func join(_ credentials: NSDictionary) {
|
|
137
117
|
|
|
138
118
|
guard !previewInProgress else {
|
|
139
|
-
if eventsEnableStatus[ON_ERROR] == true {
|
|
140
|
-
delegate?.emitEvent(
|
|
119
|
+
if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
120
|
+
delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 5000, "description": "Preview is in progress", "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
|
|
141
121
|
}
|
|
142
122
|
return
|
|
143
123
|
}
|
|
@@ -244,27 +224,28 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
244
224
|
reject?("Still in reconnecting stage", "Still in reconnecting stage", nil)
|
|
245
225
|
} else {
|
|
246
226
|
DispatchQueue.main.async { [weak self] in
|
|
247
|
-
guard let strongSelf = self else {
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
227
|
+
guard let strongSelf = self else {
|
|
228
|
+
print(#function, "Could not find reference to self while executing Room leave")
|
|
229
|
+
return
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
strongSelf.hms?.leave { [weak self] success, error in
|
|
233
|
+
|
|
234
|
+
guard let strongSelf = self else {
|
|
235
|
+
print(#function, "Could not find reference to self when callback is received while executing Room leave")
|
|
236
|
+
return
|
|
237
|
+
}
|
|
238
|
+
|
|
258
239
|
if success {
|
|
259
|
-
HMSDecoder.clearRestrictDataStates()
|
|
260
240
|
resolve?(["success": success])
|
|
241
|
+
strongSelf.cleanup() // resetting states and doing data cleanup
|
|
261
242
|
} else {
|
|
262
|
-
if strongSelf.eventsEnableStatus[
|
|
263
|
-
strongSelf.delegate?.emitEvent(
|
|
243
|
+
if strongSelf.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
244
|
+
strongSelf.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": strongSelf.id])
|
|
264
245
|
}
|
|
265
246
|
reject?("error in leave", "error in leave", nil)
|
|
266
247
|
}
|
|
267
|
-
}
|
|
248
|
+
}
|
|
268
249
|
}
|
|
269
250
|
}
|
|
270
251
|
}
|
|
@@ -283,11 +264,11 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
283
264
|
DispatchQueue.main.async { [weak self] in
|
|
284
265
|
self?.hms?.sendBroadcastMessage(type: type, message: message, completion: { message, error in
|
|
285
266
|
if error == nil {
|
|
286
|
-
resolve?(["success": true, "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]])
|
|
267
|
+
resolve?(["success": true, "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]] as [String: Any])
|
|
287
268
|
return
|
|
288
269
|
} else {
|
|
289
|
-
if self?.eventsEnableStatus[
|
|
290
|
-
self?.delegate?.emitEvent(
|
|
270
|
+
if self?.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
271
|
+
self?.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
|
|
291
272
|
}
|
|
292
273
|
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
293
274
|
return
|
|
@@ -311,11 +292,11 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
311
292
|
let encodedTargetedRoles = HMSHelper.getRolesFromRoleNames(targetedRoles, roles: self?.hms?.roles)
|
|
312
293
|
self?.hms?.sendGroupMessage(type: type, message: message, roles: encodedTargetedRoles, completion: { message, error in
|
|
313
294
|
if error == nil {
|
|
314
|
-
resolve?(["success": true, "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]])
|
|
295
|
+
resolve?(["success": true, "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]] as [String: Any])
|
|
315
296
|
return
|
|
316
297
|
} else {
|
|
317
|
-
if self?.eventsEnableStatus[
|
|
318
|
-
self?.delegate?.emitEvent(
|
|
298
|
+
if self?.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
299
|
+
self?.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
|
|
319
300
|
}
|
|
320
301
|
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
321
302
|
return
|
|
@@ -339,11 +320,11 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
339
320
|
guard let peer = HMSHelper.getRemotePeerFromPeerId(peerId, remotePeers: self?.hms?.remotePeers) else { return }
|
|
340
321
|
self?.hms?.sendDirectMessage(type: type, message: message, peer: peer, completion: { message, error in
|
|
341
322
|
if error == nil {
|
|
342
|
-
resolve?(["success": true, "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]])
|
|
323
|
+
resolve?(["success": true, "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]] as [String: Any])
|
|
343
324
|
return
|
|
344
325
|
} else {
|
|
345
|
-
if self?.eventsEnableStatus[
|
|
346
|
-
self?.delegate?.emitEvent(
|
|
326
|
+
if self?.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
327
|
+
self?.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
|
|
347
328
|
}
|
|
348
329
|
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
349
330
|
return
|
|
@@ -368,13 +349,12 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
368
349
|
if success {
|
|
369
350
|
resolve?(["success": success])
|
|
370
351
|
} else {
|
|
371
|
-
if self?.eventsEnableStatus[
|
|
372
|
-
self?.delegate?.emitEvent(
|
|
352
|
+
if self?.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
353
|
+
self?.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
|
|
373
354
|
}
|
|
374
355
|
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
375
356
|
}
|
|
376
357
|
})
|
|
377
|
-
self?.recentPreviewTracks = []
|
|
378
358
|
self?.recentRoleChangeRequest = nil
|
|
379
359
|
}
|
|
380
360
|
}
|
|
@@ -401,8 +381,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
401
381
|
if success {
|
|
402
382
|
resolve?(["success": success])
|
|
403
383
|
} else {
|
|
404
|
-
if self?.eventsEnableStatus[
|
|
405
|
-
self?.delegate?.emitEvent(
|
|
384
|
+
if self?.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
385
|
+
self?.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
|
|
406
386
|
}
|
|
407
387
|
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
408
388
|
}
|
|
@@ -439,8 +419,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
439
419
|
if success {
|
|
440
420
|
resolve?(["success": success])
|
|
441
421
|
} else {
|
|
442
|
-
if self?.eventsEnableStatus[
|
|
443
|
-
self?.delegate?.emitEvent(
|
|
422
|
+
if self?.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
423
|
+
self?.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
|
|
444
424
|
}
|
|
445
425
|
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
446
426
|
}
|
|
@@ -472,8 +452,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
472
452
|
if success {
|
|
473
453
|
resolve?(["success": success])
|
|
474
454
|
} else {
|
|
475
|
-
if self?.eventsEnableStatus[
|
|
476
|
-
self?.delegate?.emitEvent(
|
|
455
|
+
if self?.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
456
|
+
self?.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
|
|
477
457
|
}
|
|
478
458
|
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
479
459
|
}
|
|
@@ -509,8 +489,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
509
489
|
if success {
|
|
510
490
|
resolve?(["success": success])
|
|
511
491
|
} else {
|
|
512
|
-
if self?.eventsEnableStatus[
|
|
513
|
-
self?.delegate?.emitEvent(
|
|
492
|
+
if self?.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
493
|
+
self?.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
|
|
514
494
|
}
|
|
515
495
|
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
516
496
|
}
|
|
@@ -535,8 +515,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
535
515
|
guard let remotePeers = self?.hms?.remotePeers,
|
|
536
516
|
let track = HMSHelper.getTrackFromTrackId(trackId, remotePeers)
|
|
537
517
|
else {
|
|
538
|
-
if strongSelf.eventsEnableStatus[
|
|
539
|
-
strongSelf.delegate?.emitEvent(
|
|
518
|
+
if strongSelf.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
519
|
+
strongSelf.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 6002, "description": "Track not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": strongSelf.id])
|
|
540
520
|
}
|
|
541
521
|
reject?("Track not found", "Track not found", nil)
|
|
542
522
|
return
|
|
@@ -575,8 +555,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
575
555
|
if success {
|
|
576
556
|
resolve?(["success": success])
|
|
577
557
|
} else {
|
|
578
|
-
if self?.eventsEnableStatus[
|
|
579
|
-
self?.delegate?.emitEvent(
|
|
558
|
+
if self?.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
559
|
+
self?.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
|
|
580
560
|
}
|
|
581
561
|
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
582
562
|
}
|
|
@@ -599,9 +579,10 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
599
579
|
self?.hms?.endRoom(lock: lock, reason: reason, completion: { success, error in
|
|
600
580
|
if success {
|
|
601
581
|
resolve?(["success": success])
|
|
582
|
+
self?.cleanup() // resetting states and doing data cleanup
|
|
602
583
|
} else {
|
|
603
|
-
if self?.eventsEnableStatus[
|
|
604
|
-
self?.delegate?.emitEvent(
|
|
584
|
+
if self?.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
585
|
+
self?.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
|
|
605
586
|
}
|
|
606
587
|
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
607
588
|
}
|
|
@@ -681,8 +662,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
681
662
|
resolve?(["success": success])
|
|
682
663
|
return
|
|
683
664
|
} else {
|
|
684
|
-
if self.eventsEnableStatus[
|
|
685
|
-
self.delegate?.emitEvent(
|
|
665
|
+
if self.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
666
|
+
self.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
|
|
686
667
|
}
|
|
687
668
|
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
688
669
|
return
|
|
@@ -707,8 +688,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
707
688
|
|
|
708
689
|
if remoteAudioTrack != nil {
|
|
709
690
|
remoteAudioTrack?.setVolume(volume)
|
|
710
|
-
} else if strongSelf.eventsEnableStatus[
|
|
711
|
-
strongSelf.delegate?.emitEvent(
|
|
691
|
+
} else if strongSelf.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
692
|
+
strongSelf.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 6002, "description": "Track not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": strongSelf.id])
|
|
712
693
|
}
|
|
713
694
|
}
|
|
714
695
|
}
|
|
@@ -729,8 +710,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
729
710
|
if let meetLink = URL(string: meetingString) {
|
|
730
711
|
meetingUrl = meetLink
|
|
731
712
|
} else {
|
|
732
|
-
if eventsEnableStatus[ON_ERROR] == true {
|
|
733
|
-
delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "Invalid meeting url passed", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
713
|
+
if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
714
|
+
delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 6002, "description": "Invalid meeting url passed", "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
|
|
734
715
|
}
|
|
735
716
|
reject?("Invalid meeting url passed", "Invalid meeting url passed", nil)
|
|
736
717
|
}
|
|
@@ -743,8 +724,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
743
724
|
resolve?(["success": success])
|
|
744
725
|
return
|
|
745
726
|
} else {
|
|
746
|
-
if self.eventsEnableStatus[
|
|
747
|
-
self.delegate?.emitEvent(
|
|
727
|
+
if self.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
728
|
+
self.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
|
|
748
729
|
}
|
|
749
730
|
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
750
731
|
return
|
|
@@ -758,8 +739,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
758
739
|
resolve?(["success": success])
|
|
759
740
|
return
|
|
760
741
|
} else {
|
|
761
|
-
if self.eventsEnableStatus[
|
|
762
|
-
self.delegate?.emitEvent(
|
|
742
|
+
if self.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
743
|
+
self.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
|
|
763
744
|
}
|
|
764
745
|
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
765
746
|
return
|
|
@@ -780,8 +761,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
780
761
|
resolve?(["success": success])
|
|
781
762
|
return
|
|
782
763
|
} else {
|
|
783
|
-
if self.eventsEnableStatus[
|
|
784
|
-
self.delegate?.emitEvent(
|
|
764
|
+
if self.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
765
|
+
self.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
|
|
785
766
|
}
|
|
786
767
|
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
787
768
|
return
|
|
@@ -795,8 +776,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
795
776
|
resolve?(["success": success])
|
|
796
777
|
return
|
|
797
778
|
} else {
|
|
798
|
-
if self.eventsEnableStatus[
|
|
799
|
-
self.delegate?.emitEvent(
|
|
779
|
+
if self.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
780
|
+
self.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
|
|
800
781
|
}
|
|
801
782
|
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
802
783
|
return
|
|
@@ -817,8 +798,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
817
798
|
if success {
|
|
818
799
|
resolve?(["success": success])
|
|
819
800
|
} else {
|
|
820
|
-
if self.eventsEnableStatus[
|
|
821
|
-
self.delegate?.emitEvent(
|
|
801
|
+
if self.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
802
|
+
self.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
|
|
822
803
|
}
|
|
823
804
|
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
824
805
|
}
|
|
@@ -859,18 +840,10 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
859
840
|
}
|
|
860
841
|
}
|
|
861
842
|
|
|
862
|
-
func enableRTCStats() {
|
|
863
|
-
rtcStatsAttached = true
|
|
864
|
-
}
|
|
865
|
-
|
|
866
|
-
func disableRTCStats() {
|
|
867
|
-
rtcStatsAttached = false
|
|
868
|
-
}
|
|
869
|
-
|
|
870
843
|
func startScreenshare(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
871
844
|
guard let preferredExtension = preferredExtension else {
|
|
872
|
-
if eventsEnableStatus[ON_ERROR] == true {
|
|
873
|
-
delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "Could not start screen share, preferredExtension not passed in Build method", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
845
|
+
if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
846
|
+
delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 6002, "description": "Could not start screen share, preferredExtension not passed in Build method", "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
|
|
874
847
|
}
|
|
875
848
|
reject?("Could not start screen share, preferredExtension not passed in Build method", "Could not start screen share, preferredExtension not passed in Build method", nil)
|
|
876
849
|
return
|
|
@@ -893,8 +866,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
893
866
|
|
|
894
867
|
func stopScreenshare(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
895
868
|
guard let preferredExtension = preferredExtension else {
|
|
896
|
-
if eventsEnableStatus[ON_ERROR] == true {
|
|
897
|
-
delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "Could not start screen share, preferredExtension not passed in Build method", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
869
|
+
if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
870
|
+
delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 6002, "description": "Could not start screen share, preferredExtension not passed in Build method", "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
|
|
898
871
|
}
|
|
899
872
|
reject?("Could not start screen share, preferredExtension not passed in Build method", "Could not start screen share, preferredExtension not passed in Build method", nil)
|
|
900
873
|
return
|
|
@@ -938,20 +911,20 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
938
911
|
try audioFilePlayerNode.play(fileUrl: url, loops: loops, interrupts: interrupts)
|
|
939
912
|
resolve?(["success": true])
|
|
940
913
|
} catch {
|
|
941
|
-
if eventsEnableStatus[ON_ERROR] == true {
|
|
942
|
-
delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": error.localizedDescription, "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
914
|
+
if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
915
|
+
delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 6002, "description": error.localizedDescription, "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
|
|
943
916
|
}
|
|
944
917
|
reject?(error.localizedDescription, error.localizedDescription, nil)
|
|
945
918
|
}
|
|
946
919
|
} else {
|
|
947
|
-
if eventsEnableStatus[ON_ERROR] == true {
|
|
948
|
-
delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "Incorrect url", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
920
|
+
if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
921
|
+
delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 6002, "description": "Incorrect url", "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
|
|
949
922
|
}
|
|
950
923
|
reject?("Incorrect URL", "Incorrect URL", nil)
|
|
951
924
|
}
|
|
952
925
|
} else {
|
|
953
|
-
if eventsEnableStatus[ON_ERROR] == true {
|
|
954
|
-
delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
926
|
+
if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
927
|
+
delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
|
|
955
928
|
}
|
|
956
929
|
reject?("AudioFilePlayerNode not found", "AudioFilePlayerNode not found", nil)
|
|
957
930
|
}
|
|
@@ -986,8 +959,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
986
959
|
}
|
|
987
960
|
if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
|
|
988
961
|
audioFilePlayerNode.stop()
|
|
989
|
-
} else if eventsEnableStatus[ON_ERROR] == true {
|
|
990
|
-
delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
962
|
+
} else if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
963
|
+
delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
|
|
991
964
|
}
|
|
992
965
|
}
|
|
993
966
|
|
|
@@ -1004,12 +977,12 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
1004
977
|
do {
|
|
1005
978
|
try audioFilePlayerNode.resume()
|
|
1006
979
|
} catch {
|
|
1007
|
-
if eventsEnableStatus[ON_ERROR] == true {
|
|
1008
|
-
delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": error.localizedDescription, "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
980
|
+
if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
981
|
+
delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 6002, "description": error.localizedDescription, "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
|
|
1009
982
|
}
|
|
1010
983
|
}
|
|
1011
|
-
} else if eventsEnableStatus[ON_ERROR] == true {
|
|
1012
|
-
delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
984
|
+
} else if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
985
|
+
delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
|
|
1013
986
|
}
|
|
1014
987
|
}
|
|
1015
988
|
|
|
@@ -1024,8 +997,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
1024
997
|
}
|
|
1025
998
|
if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
|
|
1026
999
|
audioFilePlayerNode.pause()
|
|
1027
|
-
} else if eventsEnableStatus[ON_ERROR] == true {
|
|
1028
|
-
delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
1000
|
+
} else if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
1001
|
+
delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
|
|
1029
1002
|
}
|
|
1030
1003
|
}
|
|
1031
1004
|
|
|
@@ -1042,8 +1015,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
1042
1015
|
if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
|
|
1043
1016
|
resolve?(audioFilePlayerNode.isPlaying)
|
|
1044
1017
|
} else {
|
|
1045
|
-
if eventsEnableStatus[ON_ERROR] == true {
|
|
1046
|
-
delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
1018
|
+
if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
1019
|
+
delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
|
|
1047
1020
|
}
|
|
1048
1021
|
reject?("AudioFilePlayerNode not found", "AudioFilePlayerNode not found", nil)
|
|
1049
1022
|
}
|
|
@@ -1062,8 +1035,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
1062
1035
|
if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
|
|
1063
1036
|
resolve?(audioFilePlayerNode.currentTime)
|
|
1064
1037
|
} else {
|
|
1065
|
-
if eventsEnableStatus[ON_ERROR] == true {
|
|
1066
|
-
delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
1038
|
+
if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
1039
|
+
delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any] as [String: Any], "id": id])
|
|
1067
1040
|
}
|
|
1068
1041
|
reject?("AudioFilePlayerNode not found", "AudioFilePlayerNode not found", nil)
|
|
1069
1042
|
}
|
|
@@ -1082,8 +1055,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
1082
1055
|
if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
|
|
1083
1056
|
resolve?(audioFilePlayerNode.duration)
|
|
1084
1057
|
} else {
|
|
1085
|
-
if eventsEnableStatus[ON_ERROR] == true {
|
|
1086
|
-
delegate?.emitEvent(ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
|
|
1058
|
+
if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
1059
|
+
delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
|
|
1087
1060
|
}
|
|
1088
1061
|
reject?("AudioFilePlayerNode not found", "AudioFilePlayerNode not found", nil)
|
|
1089
1062
|
}
|
|
@@ -1100,14 +1073,32 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
1100
1073
|
func setSessionMetaData(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
1101
1074
|
let metaData = data.value(forKey: "sessionMetaData") as? String ?? ""
|
|
1102
1075
|
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1076
|
+
DispatchQueue.main.async { [weak self] in
|
|
1077
|
+
|
|
1078
|
+
guard let self = self else {
|
|
1079
|
+
let errorMessage = "\(#function) Unexpectedly encountered self as null"
|
|
1080
|
+
self?.emitRequiredKeysError(errorMessage)
|
|
1081
|
+
reject?(errorMessage, errorMessage, nil)
|
|
1082
|
+
return
|
|
1083
|
+
}
|
|
1084
|
+
|
|
1085
|
+
self.hms?.setSessionMetadata(metaData) { [weak self] success, error in
|
|
1086
|
+
|
|
1087
|
+
guard let self = self else {
|
|
1088
|
+
let errorMessage = "\(#function) Unexpectedly encountered self as null"
|
|
1089
|
+
self?.emitRequiredKeysError(errorMessage)
|
|
1090
|
+
reject?(errorMessage, errorMessage, nil)
|
|
1091
|
+
return
|
|
1092
|
+
}
|
|
1093
|
+
|
|
1094
|
+
if success {
|
|
1095
|
+
resolve?(["success": success])
|
|
1096
|
+
} else {
|
|
1097
|
+
if self.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
|
|
1098
|
+
self.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
|
|
1099
|
+
}
|
|
1100
|
+
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
1109
1101
|
}
|
|
1110
|
-
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
1111
1102
|
}
|
|
1112
1103
|
}
|
|
1113
1104
|
}
|
|
@@ -1121,7 +1112,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
1121
1112
|
}
|
|
1122
1113
|
|
|
1123
1114
|
eventsEnableStatus[eventType] = true
|
|
1124
|
-
resolve?(["success": true, "message": "function call executed successfully"])
|
|
1115
|
+
resolve?(["success": true, "message": "function call executed successfully"] as [String: Any])
|
|
1125
1116
|
}
|
|
1126
1117
|
|
|
1127
1118
|
func disableEvent(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
@@ -1133,7 +1124,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
1133
1124
|
}
|
|
1134
1125
|
|
|
1135
1126
|
eventsEnableStatus[eventType] = false
|
|
1136
|
-
resolve?(["success": true, "message": "function call executed successfully"])
|
|
1127
|
+
resolve?(["success": true, "message": "function call executed successfully"] as [String: Any])
|
|
1137
1128
|
}
|
|
1138
1129
|
|
|
1139
1130
|
func restrictData(_ data: NSDictionary) {
|
|
@@ -1172,14 +1163,31 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
1172
1163
|
}
|
|
1173
1164
|
|
|
1174
1165
|
func getSessionMetaData(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1166
|
+
|
|
1167
|
+
DispatchQueue.main.async { [weak self] in
|
|
1168
|
+
|
|
1169
|
+
guard let self = self else {
|
|
1170
|
+
let errorMessage = "\(#function) Unexpectedly encountered self as null"
|
|
1171
|
+
self?.emitRequiredKeysError(errorMessage)
|
|
1172
|
+
reject?(errorMessage, errorMessage, nil)
|
|
1173
|
+
return
|
|
1174
|
+
}
|
|
1175
|
+
|
|
1176
|
+
self.hms?.getSessionMetadata { [weak self] result, error in
|
|
1177
|
+
|
|
1178
|
+
guard let self = self else {
|
|
1179
|
+
let errorMessage = "\(#function) Unexpectedly encountered self as null"
|
|
1180
|
+
self?.emitRequiredKeysError(errorMessage)
|
|
1181
|
+
reject?(errorMessage, errorMessage, nil)
|
|
1182
|
+
return
|
|
1183
|
+
}
|
|
1184
|
+
|
|
1185
|
+
if error != nil {
|
|
1186
|
+
self.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
|
|
1187
|
+
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
1188
|
+
} else {
|
|
1189
|
+
resolve?(result)
|
|
1179
1190
|
}
|
|
1180
|
-
reject?(error?.localizedDescription, error?.localizedDescription, nil)
|
|
1181
|
-
} else {
|
|
1182
|
-
resolve?(result)
|
|
1183
1191
|
}
|
|
1184
1192
|
}
|
|
1185
1193
|
}
|
|
@@ -1289,29 +1297,79 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
1289
1297
|
}
|
|
1290
1298
|
}
|
|
1291
1299
|
|
|
1300
|
+
func getRemoteVideoTrackFromTrackId(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
1301
|
+
|
|
1302
|
+
guard let trackId = data.value(forKey: "trackId") as? String
|
|
1303
|
+
else {
|
|
1304
|
+
let errorMessage = "\(#function) " + HMSHelper.getUnavailableRequiredKey(data, ["trackId"])
|
|
1305
|
+
emitRequiredKeysError(errorMessage)
|
|
1306
|
+
reject?(errorMessage, errorMessage, nil)
|
|
1307
|
+
return
|
|
1308
|
+
}
|
|
1309
|
+
|
|
1310
|
+
DispatchQueue.main.async { [weak self] in
|
|
1311
|
+
|
|
1312
|
+
guard let self = self,
|
|
1313
|
+
let remotePeers = self.hms?.remotePeers,
|
|
1314
|
+
let remoteVideoTrack = HMSHelper.getRemoteVideoTrackFromTrackId(trackId, remotePeers)
|
|
1315
|
+
else {
|
|
1316
|
+
let errorMessage = "\(#function) " + "TRACK_NOT_FOUND"
|
|
1317
|
+
self?.emitRequiredKeysError(errorMessage)
|
|
1318
|
+
reject?(errorMessage, errorMessage, nil)
|
|
1319
|
+
return
|
|
1320
|
+
}
|
|
1321
|
+
|
|
1322
|
+
resolve?(HMSDecoder.getHMSRemoteVideoTrack(remoteVideoTrack))
|
|
1323
|
+
}
|
|
1324
|
+
}
|
|
1325
|
+
|
|
1326
|
+
func getRemoteAudioTrackFromTrackId(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
1327
|
+
guard let trackId = data.value(forKey: "trackId") as? String
|
|
1328
|
+
else {
|
|
1329
|
+
let errorMessage = "\(#function) " + HMSHelper.getUnavailableRequiredKey(data, ["trackId"])
|
|
1330
|
+
emitRequiredKeysError(errorMessage)
|
|
1331
|
+
reject?(errorMessage, errorMessage, nil)
|
|
1332
|
+
return
|
|
1333
|
+
}
|
|
1334
|
+
|
|
1335
|
+
DispatchQueue.main.async { [weak self] in
|
|
1336
|
+
|
|
1337
|
+
guard let self = self,
|
|
1338
|
+
let remotePeers = self.hms?.remotePeers,
|
|
1339
|
+
let remoteAudioTrack = HMSHelper.getRemoteAudioTrackFromTrackId(trackId, remotePeers)
|
|
1340
|
+
else {
|
|
1341
|
+
let errorMessage = "\(#function) " + "TRACK_NOT_FOUND"
|
|
1342
|
+
self?.emitRequiredKeysError(errorMessage)
|
|
1343
|
+
reject?(errorMessage, errorMessage, nil)
|
|
1344
|
+
return
|
|
1345
|
+
}
|
|
1346
|
+
|
|
1347
|
+
resolve?(HMSDecoder.getHMSRemoteAudioTrack(remoteAudioTrack))
|
|
1348
|
+
}
|
|
1349
|
+
}
|
|
1350
|
+
|
|
1292
1351
|
// MARK: - HMS SDK Delegate Callbacks
|
|
1293
1352
|
func on(join room: HMSRoom) {
|
|
1294
|
-
|
|
1295
|
-
if eventsEnableStatus[ON_JOIN] != true {
|
|
1353
|
+
if eventsEnableStatus[HMSConstants.ON_JOIN] != true {
|
|
1296
1354
|
return
|
|
1297
1355
|
}
|
|
1298
1356
|
let roomData = HMSDecoder.getHmsRoomSubset(room)
|
|
1299
|
-
self.delegate?.emitEvent(ON_JOIN, ["event": ON_JOIN, "id": self.id, "room": roomData])
|
|
1357
|
+
self.delegate?.emitEvent(HMSConstants.ON_JOIN, ["event": HMSConstants.ON_JOIN, "id": self.id, "room": roomData])
|
|
1300
1358
|
}
|
|
1301
1359
|
|
|
1302
1360
|
func onPreview(room: HMSRoom, localTracks: [HMSTrack]) {
|
|
1303
1361
|
previewInProgress = false
|
|
1304
|
-
if eventsEnableStatus[ON_PREVIEW] != true {
|
|
1362
|
+
if eventsEnableStatus[HMSConstants.ON_PREVIEW] != true {
|
|
1305
1363
|
return
|
|
1306
1364
|
}
|
|
1307
1365
|
let previewTracks = HMSDecoder.getPreviewTracks(localTracks)
|
|
1308
1366
|
let hmsRoom = HMSDecoder.getHmsRoomSubset(room)
|
|
1309
1367
|
|
|
1310
|
-
self.delegate?.emitEvent(ON_PREVIEW, ["event": ON_PREVIEW, "id": self.id, "room": hmsRoom, "previewTracks": previewTracks])
|
|
1368
|
+
self.delegate?.emitEvent(HMSConstants.ON_PREVIEW, ["event": HMSConstants.ON_PREVIEW, "id": self.id, "room": hmsRoom, "previewTracks": previewTracks])
|
|
1311
1369
|
}
|
|
1312
1370
|
|
|
1313
1371
|
func on(room: HMSRoom, update: HMSRoomUpdate) {
|
|
1314
|
-
if eventsEnableStatus[ON_ROOM_UPDATE] != true {
|
|
1372
|
+
if eventsEnableStatus[HMSConstants.ON_ROOM_UPDATE] != true {
|
|
1315
1373
|
return
|
|
1316
1374
|
}
|
|
1317
1375
|
if update == .metaDataUpdated || update == .roomTypeChanged {
|
|
@@ -1321,11 +1379,11 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
1321
1379
|
let roomData = HMSDecoder.getHmsRoomSubset(room, update)
|
|
1322
1380
|
let type = getString(from: update)
|
|
1323
1381
|
|
|
1324
|
-
self.delegate?.emitEvent(ON_ROOM_UPDATE, ["event": ON_ROOM_UPDATE, "id": self.id, "type": type, "room": roomData])
|
|
1382
|
+
self.delegate?.emitEvent(HMSConstants.ON_ROOM_UPDATE, ["event": HMSConstants.ON_ROOM_UPDATE, "id": self.id, "type": type, "room": roomData])
|
|
1325
1383
|
}
|
|
1326
1384
|
|
|
1327
1385
|
func on(peer: HMSPeer, update: HMSPeerUpdate) {
|
|
1328
|
-
if eventsEnableStatus[ON_PEER_UPDATE] != true {
|
|
1386
|
+
if eventsEnableStatus[HMSConstants.ON_PEER_UPDATE] != true {
|
|
1329
1387
|
return
|
|
1330
1388
|
}
|
|
1331
1389
|
let type = getString(from: update)
|
|
@@ -1335,7 +1393,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
1335
1393
|
return
|
|
1336
1394
|
}
|
|
1337
1395
|
|
|
1338
|
-
self.delegate?.emitEvent(ON_PEER_UPDATE, hmsPeer)
|
|
1396
|
+
self.delegate?.emitEvent(HMSConstants.ON_PEER_UPDATE, hmsPeer)
|
|
1339
1397
|
}
|
|
1340
1398
|
|
|
1341
1399
|
func on(track: HMSTrack, update: HMSTrackUpdate, for peer: HMSPeer) {
|
|
@@ -1351,7 +1409,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
1351
1409
|
}
|
|
1352
1410
|
}
|
|
1353
1411
|
|
|
1354
|
-
if eventsEnableStatus[ON_TRACK_UPDATE] != true {
|
|
1412
|
+
if eventsEnableStatus[HMSConstants.ON_TRACK_UPDATE] != true {
|
|
1355
1413
|
return
|
|
1356
1414
|
}
|
|
1357
1415
|
|
|
@@ -1359,73 +1417,75 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
1359
1417
|
let hmsPeer = HMSDecoder.getHmsPeerSubset(peer)
|
|
1360
1418
|
let hmsTrack = HMSDecoder.getHmsTrack(track)
|
|
1361
1419
|
|
|
1362
|
-
self.delegate?.emitEvent(ON_TRACK_UPDATE, ["event": ON_TRACK_UPDATE, "id": self.id, "type": type, "peer": hmsPeer, "track": hmsTrack])
|
|
1420
|
+
self.delegate?.emitEvent(HMSConstants.ON_TRACK_UPDATE, ["event": HMSConstants.ON_TRACK_UPDATE, "id": self.id, "type": type, "peer": hmsPeer, "track": hmsTrack])
|
|
1363
1421
|
}
|
|
1364
1422
|
|
|
1365
1423
|
func on(error: Error) {
|
|
1366
1424
|
if previewInProgress { previewInProgress = false }
|
|
1367
|
-
if eventsEnableStatus[ON_ERROR] != true {
|
|
1425
|
+
if eventsEnableStatus[HMSConstants.ON_ERROR] != true {
|
|
1368
1426
|
return
|
|
1369
1427
|
}
|
|
1370
|
-
self.delegate?.emitEvent(ON_ERROR, ["error": HMSDecoder.getError(error), "id": id])
|
|
1428
|
+
self.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": id])
|
|
1371
1429
|
}
|
|
1372
1430
|
|
|
1373
1431
|
func on(message: HMSMessage) {
|
|
1374
|
-
if eventsEnableStatus[ON_MESSAGE] != true {
|
|
1432
|
+
if eventsEnableStatus[HMSConstants.ON_MESSAGE] != true {
|
|
1375
1433
|
return
|
|
1376
1434
|
}
|
|
1377
|
-
self.delegate?.emitEvent(ON_MESSAGE, ["event": ON_MESSAGE, "id": self.id, "sender": HMSDecoder.getHmsPeerSubset(message.sender), "recipient": HMSDecoder.getHmsMessageRecipient(message.recipient), "time": message.time.timeIntervalSince1970 * 1000, "message": message.message, "type": message.type])
|
|
1435
|
+
self.delegate?.emitEvent(HMSConstants.ON_MESSAGE, ["event": HMSConstants.ON_MESSAGE, "id": self.id, "sender": HMSDecoder.getHmsPeerSubset(message.sender), "recipient": HMSDecoder.getHmsMessageRecipient(message.recipient), "time": message.time.timeIntervalSince1970 * 1000, "message": message.message, "type": message.type])
|
|
1378
1436
|
}
|
|
1379
1437
|
|
|
1380
1438
|
func on(updated speakers: [HMSSpeaker]) {
|
|
1381
|
-
if eventsEnableStatus[ON_SPEAKER] != true {
|
|
1439
|
+
if eventsEnableStatus[HMSConstants.ON_SPEAKER] != true {
|
|
1382
1440
|
return
|
|
1383
1441
|
}
|
|
1384
1442
|
var speakerPeerIds: [[String: Any]] = []
|
|
1385
1443
|
for speaker in speakers {
|
|
1386
1444
|
speakerPeerIds.append(["peer": HMSDecoder.getHmsPeerSubset(speaker.peer), "level": speaker.level, "track": HMSDecoder.getHmsTrack(speaker.track)])
|
|
1387
1445
|
}
|
|
1388
|
-
self.delegate?.emitEvent(ON_SPEAKER, ["event": ON_SPEAKER, "id": self.id, "speakers": speakerPeerIds])
|
|
1446
|
+
self.delegate?.emitEvent(HMSConstants.ON_SPEAKER, ["event": HMSConstants.ON_SPEAKER, "id": self.id, "speakers": speakerPeerIds])
|
|
1389
1447
|
}
|
|
1390
1448
|
|
|
1391
1449
|
func onReconnecting() {
|
|
1392
1450
|
reconnectingStage = true
|
|
1393
|
-
if eventsEnableStatus[RECONNECTING] != true {
|
|
1451
|
+
if eventsEnableStatus[HMSConstants.RECONNECTING] != true {
|
|
1394
1452
|
return
|
|
1395
1453
|
}
|
|
1396
|
-
self.delegate?.emitEvent(RECONNECTING, ["event": RECONNECTING, "error": ["code": 1003, "description": "Network connection lost ", "isTerminal": false, "canRetry": true], "id": self.id ])
|
|
1454
|
+
self.delegate?.emitEvent(HMSConstants.RECONNECTING, ["event": HMSConstants.RECONNECTING, "error": ["code": 1003, "description": "Network connection lost ", "isTerminal": false, "canRetry": true] as [String: Any], "id": self.id ])
|
|
1397
1455
|
}
|
|
1398
1456
|
|
|
1399
1457
|
func onReconnected() {
|
|
1400
1458
|
reconnectingStage = false
|
|
1401
|
-
if eventsEnableStatus[RECONNECTED] != true {
|
|
1459
|
+
if eventsEnableStatus[HMSConstants.RECONNECTED] != true {
|
|
1402
1460
|
return
|
|
1403
1461
|
}
|
|
1404
|
-
self.delegate?.emitEvent(RECONNECTED, ["event": RECONNECTED, "id": self.id ])
|
|
1462
|
+
self.delegate?.emitEvent(HMSConstants.RECONNECTED, ["event": HMSConstants.RECONNECTED, "id": self.id ])
|
|
1405
1463
|
}
|
|
1406
1464
|
|
|
1407
1465
|
func on(roleChangeRequest: HMSRoleChangeRequest) {
|
|
1408
1466
|
recentRoleChangeRequest = roleChangeRequest
|
|
1409
|
-
if eventsEnableStatus[ON_ROLE_CHANGE_REQUEST] != true {
|
|
1467
|
+
if eventsEnableStatus[HMSConstants.ON_ROLE_CHANGE_REQUEST] != true {
|
|
1410
1468
|
return
|
|
1411
1469
|
}
|
|
1412
1470
|
let decodedRoleChangeRequest = HMSDecoder.getHmsRoleChangeRequest(roleChangeRequest, self.id)
|
|
1413
|
-
self.delegate?.emitEvent(ON_ROLE_CHANGE_REQUEST, decodedRoleChangeRequest)
|
|
1471
|
+
self.delegate?.emitEvent(HMSConstants.ON_ROLE_CHANGE_REQUEST, decodedRoleChangeRequest)
|
|
1414
1472
|
}
|
|
1415
1473
|
|
|
1416
1474
|
func on(changeTrackStateRequest: HMSChangeTrackStateRequest) {
|
|
1417
|
-
if eventsEnableStatus[
|
|
1475
|
+
if eventsEnableStatus[HMSConstants.ON_CHANGE_TRACK_STATE_REQUEST] != true {
|
|
1418
1476
|
return
|
|
1419
1477
|
}
|
|
1420
1478
|
let decodedChangeTrackStateRequest = HMSDecoder.getHmsChangeTrackStateRequest(changeTrackStateRequest, id)
|
|
1421
|
-
delegate?.emitEvent(
|
|
1479
|
+
delegate?.emitEvent(HMSConstants.ON_CHANGE_TRACK_STATE_REQUEST, decodedChangeTrackStateRequest)
|
|
1422
1480
|
}
|
|
1423
1481
|
|
|
1424
1482
|
func on(removedFromRoom notification: HMSRemovedFromRoomNotification) {
|
|
1425
|
-
|
|
1426
|
-
if eventsEnableStatus[ON_REMOVED_FROM_ROOM] != true {
|
|
1483
|
+
|
|
1484
|
+
if eventsEnableStatus[HMSConstants.ON_REMOVED_FROM_ROOM] != true {
|
|
1485
|
+
self.cleanup() // resetting states and doing data cleanup
|
|
1427
1486
|
return
|
|
1428
1487
|
}
|
|
1488
|
+
|
|
1429
1489
|
let requestedBy = notification.requestedBy as HMSPeer?
|
|
1430
1490
|
var decodedRequestedBy: [String: Any]?
|
|
1431
1491
|
if let requested = requestedBy {
|
|
@@ -1433,80 +1493,439 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
1433
1493
|
}
|
|
1434
1494
|
let reason = notification.reason
|
|
1435
1495
|
let roomEnded = notification.roomEnded
|
|
1436
|
-
self.delegate?.emitEvent(ON_REMOVED_FROM_ROOM, ["event": ON_REMOVED_FROM_ROOM, "id": self.id, "requestedBy": decodedRequestedBy as Any, "reason": reason, "roomEnded": roomEnded ])
|
|
1496
|
+
self.delegate?.emitEvent(HMSConstants.ON_REMOVED_FROM_ROOM, ["event": HMSConstants.ON_REMOVED_FROM_ROOM, "id": self.id, "requestedBy": decodedRequestedBy as Any, "reason": reason, "roomEnded": roomEnded ])
|
|
1497
|
+
|
|
1498
|
+
self.cleanup() // resetting states and doing data cleanup
|
|
1437
1499
|
}
|
|
1438
1500
|
|
|
1439
|
-
func on(
|
|
1440
|
-
|
|
1501
|
+
func on(sessionStoreAvailable store: HMSSessionStore) {
|
|
1502
|
+
self.sessionStore = store
|
|
1503
|
+
if eventsEnableStatus[HMSConstants.ON_SESSION_STORE_AVAILABLE] != true {
|
|
1441
1504
|
return
|
|
1442
1505
|
}
|
|
1443
|
-
|
|
1506
|
+
self.delegate?.emitEvent(HMSConstants.ON_SESSION_STORE_AVAILABLE, ["id": self.id])
|
|
1507
|
+
}
|
|
1508
|
+
|
|
1509
|
+
func on(rtcStats: HMSRTCStatsReport) {
|
|
1510
|
+
if eventsEnableStatus[HMSConstants.ON_RTC_STATS] != true {
|
|
1444
1511
|
return
|
|
1445
1512
|
}
|
|
1446
|
-
let video = HMSDecoder.getHMSRTCStats(rtcStats.video)
|
|
1447
|
-
let audio = HMSDecoder.getHMSRTCStats(rtcStats.audio)
|
|
1448
|
-
let combined = HMSDecoder.getHMSRTCStats(rtcStats.combined)
|
|
1513
|
+
let video = HMSDecoder.getHMSRTCStats(rtcStats.video) // [bitrateReceived, bitrateSent, bytesReceived, bytesSent, packetsLost, packetsReceived, roundTripTime]
|
|
1514
|
+
let audio = HMSDecoder.getHMSRTCStats(rtcStats.audio) // [bitrateReceived, bitrateSent, bytesReceived, bytesSent, packetsLost, packetsReceived, roundTripTime]
|
|
1515
|
+
let combined = HMSDecoder.getHMSRTCStats(rtcStats.combined) // [bitrateReceived, bitrateSent, bytesReceived, bytesSent, packetsLost, packetsReceived, roundTripTime]
|
|
1449
1516
|
|
|
1450
|
-
self.delegate?.emitEvent(ON_RTC_STATS, ["video": video, "audio": audio, "combined": combined, "id": self.id])
|
|
1517
|
+
self.delegate?.emitEvent(HMSConstants.ON_RTC_STATS, ["video": video, "audio": audio, "combined": combined, "id": self.id])
|
|
1451
1518
|
}
|
|
1452
1519
|
|
|
1453
1520
|
func on(localAudioStats: HMSLocalAudioStats, track: HMSAudioTrack, peer: HMSPeer) {
|
|
1454
|
-
if eventsEnableStatus[ON_LOCAL_AUDIO_STATS] != true {
|
|
1521
|
+
if eventsEnableStatus[HMSConstants.ON_LOCAL_AUDIO_STATS] != true {
|
|
1455
1522
|
return
|
|
1456
1523
|
}
|
|
1457
|
-
|
|
1458
|
-
return
|
|
1459
|
-
}
|
|
1460
|
-
let localStats = HMSDecoder.getLocalAudioStats(localAudioStats)
|
|
1524
|
+
let localStats = HMSDecoder.getLocalAudioStats(localAudioStats) // [bitrate, bytesSent, roundTripTime]
|
|
1461
1525
|
let localTrack = HMSDecoder.getHmsAudioTrack(track)
|
|
1462
1526
|
let decodedPeer = HMSDecoder.getHmsPeerSubset(peer)
|
|
1463
1527
|
|
|
1464
|
-
self.delegate?.emitEvent(ON_LOCAL_AUDIO_STATS, ["localAudioStats": localStats, "track": localTrack, "peer": decodedPeer, "id": self.id])
|
|
1528
|
+
self.delegate?.emitEvent(HMSConstants.ON_LOCAL_AUDIO_STATS, ["localAudioStats": localStats, "track": localTrack, "peer": decodedPeer, "id": self.id])
|
|
1465
1529
|
}
|
|
1466
1530
|
|
|
1467
|
-
func on(localVideoStats: [HMSLocalVideoStats], track: HMSVideoTrack, peer: HMSPeer) {
|
|
1468
|
-
if eventsEnableStatus[ON_LOCAL_VIDEO_STATS] != true {
|
|
1531
|
+
func on(localVideoStats: [HMSLocalVideoStats], track: HMSVideoTrack, peer: HMSPeer) { // DOUBT: HMSLocalVideoTrack instead of HMSVideoTrack?
|
|
1532
|
+
if eventsEnableStatus[HMSConstants.ON_LOCAL_VIDEO_STATS] != true {
|
|
1469
1533
|
return
|
|
1470
1534
|
}
|
|
1471
|
-
|
|
1472
|
-
return
|
|
1473
|
-
}
|
|
1474
|
-
let localStats = HMSDecoder.getLocalVideoStats(localVideoStats)
|
|
1535
|
+
let localStats = HMSDecoder.getLocalVideoStats(localVideoStats) // List<[bitrate, bytesSent, roundTripTime, frameRate, resolution, layer]>
|
|
1475
1536
|
let decodedPeer = HMSDecoder.getHmsPeerSubset(peer)
|
|
1476
1537
|
let localTrack = HMSDecoder.getHmsVideoTrack(track)
|
|
1477
1538
|
|
|
1478
|
-
self.delegate?.emitEvent(ON_LOCAL_VIDEO_STATS, ["localVideoStats": localStats, "track": localTrack, "peer": decodedPeer, "id": self.id])
|
|
1539
|
+
self.delegate?.emitEvent(HMSConstants.ON_LOCAL_VIDEO_STATS, ["localVideoStats": localStats, "track": localTrack, "peer": decodedPeer, "id": self.id])
|
|
1479
1540
|
}
|
|
1480
1541
|
|
|
1481
1542
|
func on(remoteAudioStats: HMSRemoteAudioStats, track: HMSAudioTrack, peer: HMSPeer) {
|
|
1482
|
-
if eventsEnableStatus[ON_REMOTE_AUDIO_STATS] != true {
|
|
1483
|
-
return
|
|
1484
|
-
}
|
|
1485
|
-
if !rtcStatsAttached {
|
|
1543
|
+
if eventsEnableStatus[HMSConstants.ON_REMOTE_AUDIO_STATS] != true {
|
|
1486
1544
|
return
|
|
1487
1545
|
}
|
|
1488
|
-
let remoteStats = HMSDecoder.getRemoteAudioStats(remoteAudioStats)
|
|
1546
|
+
let remoteStats = HMSDecoder.getRemoteAudioStats(remoteAudioStats) // [bitrate, bytesReceived, jitter, packetsLost, packetsReceived]
|
|
1489
1547
|
let remoteTrack = HMSDecoder.getHmsAudioTrack(track)
|
|
1490
1548
|
let decodedPeer = HMSDecoder.getHmsPeerSubset(peer)
|
|
1491
1549
|
|
|
1492
|
-
self.delegate?.emitEvent(ON_REMOTE_AUDIO_STATS, ["remoteAudioStats": remoteStats, "track": remoteTrack, "peer": decodedPeer, "id": self.id])
|
|
1550
|
+
self.delegate?.emitEvent(HMSConstants.ON_REMOTE_AUDIO_STATS, ["remoteAudioStats": remoteStats, "track": remoteTrack, "peer": decodedPeer, "id": self.id])
|
|
1493
1551
|
}
|
|
1494
1552
|
|
|
1495
1553
|
func on(remoteVideoStats: HMSRemoteVideoStats, track: HMSVideoTrack, peer: HMSPeer) {
|
|
1496
|
-
if eventsEnableStatus[ON_REMOTE_VIDEO_STATS] != true {
|
|
1497
|
-
return
|
|
1498
|
-
}
|
|
1499
|
-
if !rtcStatsAttached {
|
|
1554
|
+
if eventsEnableStatus[HMSConstants.ON_REMOTE_VIDEO_STATS] != true {
|
|
1500
1555
|
return
|
|
1501
1556
|
}
|
|
1502
|
-
let remoteStats = HMSDecoder.getRemoteVideoStats(remoteVideoStats)
|
|
1557
|
+
let remoteStats = HMSDecoder.getRemoteVideoStats(remoteVideoStats) // [bitrate, bytesReceived, frameRate, jitter, packetsLost, packetsReceived, resolution]
|
|
1503
1558
|
let decodedPeer = HMSDecoder.getHmsPeerSubset(peer)
|
|
1504
1559
|
let remoteTrack = HMSDecoder.getHmsVideoTrack(track)
|
|
1505
1560
|
|
|
1506
|
-
self.delegate?.emitEvent(ON_REMOTE_VIDEO_STATS, ["remoteVideoStats": remoteStats, "track": remoteTrack, "peer": decodedPeer, "id": self.id])
|
|
1561
|
+
self.delegate?.emitEvent(HMSConstants.ON_REMOTE_VIDEO_STATS, ["remoteVideoStats": remoteStats, "track": remoteTrack, "peer": decodedPeer, "id": self.id])
|
|
1562
|
+
}
|
|
1563
|
+
|
|
1564
|
+
// MARK: - Simulcast
|
|
1565
|
+
|
|
1566
|
+
func getVideoTrackLayerDefinition(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
1567
|
+
guard let trackId = data.value(forKey: "trackId") as? String
|
|
1568
|
+
else {
|
|
1569
|
+
let errorMessage = "\(#function) " + HMSHelper.getUnavailableRequiredKey(data, ["trackId"])
|
|
1570
|
+
emitRequiredKeysError(errorMessage)
|
|
1571
|
+
reject?(errorMessage, errorMessage, nil)
|
|
1572
|
+
return
|
|
1573
|
+
}
|
|
1574
|
+
|
|
1575
|
+
DispatchQueue.main.async { [weak self] in
|
|
1576
|
+
|
|
1577
|
+
guard let self = self,
|
|
1578
|
+
let remotePeers = self.hms?.remotePeers,
|
|
1579
|
+
let remoteVideoTrack = HMSHelper.getRemoteVideoTrackFromTrackId(trackId, remotePeers)
|
|
1580
|
+
else {
|
|
1581
|
+
let errorMessage = "\(#function) " + "TRACK_NOT_FOUND"
|
|
1582
|
+
self?.emitRequiredKeysError(errorMessage)
|
|
1583
|
+
reject?(errorMessage, errorMessage, nil)
|
|
1584
|
+
return
|
|
1585
|
+
}
|
|
1586
|
+
|
|
1587
|
+
guard let layerDefinitions = remoteVideoTrack.layerDefinitions
|
|
1588
|
+
else {
|
|
1589
|
+
let errorMessage = "\(#function) " + "layer definitions not available for track: '\(trackId)' !"
|
|
1590
|
+
self.emitRequiredKeysError(errorMessage)
|
|
1591
|
+
reject?(errorMessage, errorMessage, nil)
|
|
1592
|
+
return
|
|
1593
|
+
}
|
|
1594
|
+
|
|
1595
|
+
let parsedLayerDefinitions = HMSDecoder.getSimulcastLayerDefinitions(for: layerDefinitions)
|
|
1596
|
+
|
|
1597
|
+
resolve?(parsedLayerDefinitions)
|
|
1598
|
+
}
|
|
1599
|
+
}
|
|
1600
|
+
|
|
1601
|
+
func getVideoTrackLayer(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
1602
|
+
|
|
1603
|
+
guard let trackId = data.value(forKey: "trackId") as? String
|
|
1604
|
+
else {
|
|
1605
|
+
let errorMessage = "\(#function) " + HMSHelper.getUnavailableRequiredKey(data, ["trackId"])
|
|
1606
|
+
emitRequiredKeysError(errorMessage)
|
|
1607
|
+
reject?(errorMessage, errorMessage, nil)
|
|
1608
|
+
return
|
|
1609
|
+
}
|
|
1610
|
+
|
|
1611
|
+
DispatchQueue.main.async { [weak self] in
|
|
1612
|
+
|
|
1613
|
+
guard let self = self,
|
|
1614
|
+
let remotePeers = self.hms?.remotePeers,
|
|
1615
|
+
let remoteVideoTrack = HMSHelper.getRemoteVideoTrackFromTrackId(trackId, remotePeers)
|
|
1616
|
+
else {
|
|
1617
|
+
let errorMessage = "\(#function) " + "TRACK_NOT_FOUND"
|
|
1618
|
+
self?.emitRequiredKeysError(errorMessage)
|
|
1619
|
+
reject?(errorMessage, errorMessage, nil)
|
|
1620
|
+
return
|
|
1621
|
+
}
|
|
1622
|
+
|
|
1623
|
+
let parsedLayer = HMSDecoder.getString(from: remoteVideoTrack.layer)
|
|
1624
|
+
|
|
1625
|
+
resolve?(parsedLayer)
|
|
1626
|
+
}
|
|
1627
|
+
}
|
|
1628
|
+
|
|
1629
|
+
func setVideoTrackLayer(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
1630
|
+
guard let trackId = data.value(forKey: "trackId") as? String,
|
|
1631
|
+
let layer = data.value(forKey: "layer") as? String
|
|
1632
|
+
else {
|
|
1633
|
+
let errorMessage = "\(#function) " + HMSHelper.getUnavailableRequiredKey(data, ["trackId", "layer"])
|
|
1634
|
+
emitRequiredKeysError(errorMessage)
|
|
1635
|
+
reject?(errorMessage, errorMessage, nil)
|
|
1636
|
+
return
|
|
1637
|
+
}
|
|
1638
|
+
|
|
1639
|
+
DispatchQueue.main.async { [weak self] in
|
|
1640
|
+
|
|
1641
|
+
guard let self = self,
|
|
1642
|
+
let remotePeers = self.hms?.remotePeers,
|
|
1643
|
+
let remoteVideoTrack = HMSHelper.getRemoteVideoTrackFromTrackId(trackId, remotePeers)
|
|
1644
|
+
else {
|
|
1645
|
+
let errorMessage = "\(#function) " + "TRACK_NOT_FOUND"
|
|
1646
|
+
self?.emitRequiredKeysError(errorMessage)
|
|
1647
|
+
reject?(errorMessage, errorMessage, nil)
|
|
1648
|
+
return
|
|
1649
|
+
}
|
|
1650
|
+
|
|
1651
|
+
switch layer.uppercased() {
|
|
1652
|
+
case "LOW":
|
|
1653
|
+
remoteVideoTrack.layer = .low
|
|
1654
|
+
case "MEDIUM":
|
|
1655
|
+
remoteVideoTrack.layer = .mid
|
|
1656
|
+
default:
|
|
1657
|
+
remoteVideoTrack.layer = .high
|
|
1658
|
+
}
|
|
1659
|
+
|
|
1660
|
+
resolve?(true)
|
|
1661
|
+
}
|
|
1662
|
+
}
|
|
1663
|
+
|
|
1664
|
+
// MARK: - Advanced Camera Controls
|
|
1665
|
+
|
|
1666
|
+
func captureImageAtMaxSupportedResolution(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
1667
|
+
|
|
1668
|
+
let withFlash = data["flash"] as? Bool ?? false
|
|
1669
|
+
|
|
1670
|
+
DispatchQueue.main.async { [weak self] in
|
|
1671
|
+
|
|
1672
|
+
guard let localPeer = self?.hms?.localPeer else {
|
|
1673
|
+
let errorMessage = "\(#function) An instance of Local Peer could not be found. Please check if a Room is joined."
|
|
1674
|
+
reject?("6004", errorMessage, nil)
|
|
1675
|
+
return
|
|
1676
|
+
}
|
|
1677
|
+
|
|
1678
|
+
guard let localVideoTrack = localPeer.localVideoTrack()
|
|
1679
|
+
else {
|
|
1680
|
+
let errorMessage = "\(#function) Video Track of Local Peer could not be found. Please check if the Local Peer has permission to publish video & video is unmuted currently."
|
|
1681
|
+
reject?("6004", errorMessage, nil)
|
|
1682
|
+
return
|
|
1683
|
+
}
|
|
1684
|
+
|
|
1685
|
+
localVideoTrack.captureImageAtMaxSupportedResolution(withFlash: withFlash) { image in
|
|
1686
|
+
|
|
1687
|
+
guard let rawImage = image, let capturedImage = rawImage.fixOrientation() else {
|
|
1688
|
+
let errorMessage = "\(#function) Could not capture image of the Local Peer's Video Track."
|
|
1689
|
+
reject?("6004", errorMessage, nil)
|
|
1690
|
+
return
|
|
1691
|
+
}
|
|
1692
|
+
|
|
1693
|
+
guard let data = capturedImage.pngData() else {
|
|
1694
|
+
let errorMessage = "\(#function) Could not compress image of the Local Peer's Video Track to png data."
|
|
1695
|
+
reject?("6004", errorMessage, nil)
|
|
1696
|
+
return
|
|
1697
|
+
}
|
|
1698
|
+
|
|
1699
|
+
let filePath = HMSRNSDK.getDocumentsDirectory().appendingPathComponent("hms_\(HMSRNSDK.getTimeStamp()).png")
|
|
1700
|
+
|
|
1701
|
+
do {
|
|
1702
|
+
try data.write(to: filePath)
|
|
1703
|
+
|
|
1704
|
+
resolve?(filePath.relativePath)
|
|
1705
|
+
} catch let error {
|
|
1706
|
+
let errorMessage = "\(#function) Could not write to disk the image data of the Local Peer's Video Track. \(error.localizedDescription)"
|
|
1707
|
+
reject?("6004", errorMessage, nil)
|
|
1708
|
+
return
|
|
1709
|
+
}
|
|
1710
|
+
}
|
|
1711
|
+
}
|
|
1712
|
+
}
|
|
1713
|
+
|
|
1714
|
+
// MARK: - Session Store
|
|
1715
|
+
|
|
1716
|
+
func getSessionMetadataForKey(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
1717
|
+
|
|
1718
|
+
DispatchQueue.main.async { [weak self] in
|
|
1719
|
+
|
|
1720
|
+
guard let store = self?.sessionStore
|
|
1721
|
+
else {
|
|
1722
|
+
let errorMessage = "\(#function) Session Store is null"
|
|
1723
|
+
reject?("6004", errorMessage, nil)
|
|
1724
|
+
return
|
|
1725
|
+
}
|
|
1726
|
+
|
|
1727
|
+
guard let data = data as? [AnyHashable: Any],
|
|
1728
|
+
let key = data["key"] as? String
|
|
1729
|
+
else {
|
|
1730
|
+
let errorMessage = "\(#function) Key to be fetched from Session Store is null." + HMSHelper.getUnavailableRequiredKey(data, ["key"])
|
|
1731
|
+
reject?("6004", errorMessage, nil)
|
|
1732
|
+
return
|
|
1733
|
+
}
|
|
1734
|
+
|
|
1735
|
+
store.object(forKey: key) { value, error in
|
|
1736
|
+
|
|
1737
|
+
if let error = error {
|
|
1738
|
+
let errorMessage = "\(#function) Error in fetching key: \(key) from Session Store. Error: \(error.localizedDescription)"
|
|
1739
|
+
reject?("6004", errorMessage, nil)
|
|
1740
|
+
return
|
|
1741
|
+
}
|
|
1742
|
+
|
|
1743
|
+
if let value = value {
|
|
1744
|
+
if let stringValue = value as? String {
|
|
1745
|
+
resolve?(stringValue)
|
|
1746
|
+
} else {
|
|
1747
|
+
let errorMessage = "\(#function) Session Store value for the key: \(key) is not of String Type. Value: \(value)"
|
|
1748
|
+
reject?("6004", errorMessage, nil)
|
|
1749
|
+
}
|
|
1750
|
+
} else {
|
|
1751
|
+
resolve?(nil)
|
|
1752
|
+
}
|
|
1753
|
+
}
|
|
1754
|
+
}
|
|
1755
|
+
}
|
|
1756
|
+
|
|
1757
|
+
func setSessionMetadataForKey(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
1758
|
+
|
|
1759
|
+
DispatchQueue.main.async { [weak self] in
|
|
1760
|
+
|
|
1761
|
+
guard let store = self?.sessionStore
|
|
1762
|
+
else {
|
|
1763
|
+
let errorMessage = "\(#function) Session Store is null"
|
|
1764
|
+
reject?("6004", errorMessage, nil)
|
|
1765
|
+
return
|
|
1766
|
+
}
|
|
1767
|
+
|
|
1768
|
+
guard let data = data as? [AnyHashable: Any],
|
|
1769
|
+
let key = data["key"] as? String
|
|
1770
|
+
else {
|
|
1771
|
+
let errorMessage = "\(#function) Key for the object to be set in Session Store is null." + HMSHelper.getUnavailableRequiredKey(data, ["key"])
|
|
1772
|
+
reject?("6004", errorMessage, nil)
|
|
1773
|
+
return
|
|
1774
|
+
}
|
|
1775
|
+
|
|
1776
|
+
let valueToBeSet = data["value"] as Any
|
|
1777
|
+
|
|
1778
|
+
store.set(valueToBeSet, forKey: key) { value, error in
|
|
1779
|
+
|
|
1780
|
+
if let error = error {
|
|
1781
|
+
let errorMessage = "\(#function) Error in setting value: \(valueToBeSet) for key: \(key) to the Session Store. Error: \(error.localizedDescription)"
|
|
1782
|
+
reject?("6004", errorMessage, nil)
|
|
1783
|
+
return
|
|
1784
|
+
}
|
|
1785
|
+
resolve?(["success": true, "finalValue": value])
|
|
1786
|
+
}
|
|
1787
|
+
}
|
|
1788
|
+
}
|
|
1789
|
+
|
|
1790
|
+
func addKeyChangeListener(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
1791
|
+
|
|
1792
|
+
DispatchQueue.main.async { [weak self] in
|
|
1793
|
+
|
|
1794
|
+
guard let store = self?.sessionStore
|
|
1795
|
+
else {
|
|
1796
|
+
let errorMessage = "\(#function) Session Store is null"
|
|
1797
|
+
reject?("6004", errorMessage, nil)
|
|
1798
|
+
return
|
|
1799
|
+
}
|
|
1800
|
+
|
|
1801
|
+
guard let data = data as? [AnyHashable: Any]
|
|
1802
|
+
else {
|
|
1803
|
+
let errorMessage = "\(#function) No arguments passed which can be attached to Key Change Listener on the Session Store."
|
|
1804
|
+
reject?("6004", errorMessage, nil)
|
|
1805
|
+
return
|
|
1806
|
+
}
|
|
1807
|
+
|
|
1808
|
+
guard let keys = data["keys"] as? [String]
|
|
1809
|
+
else {
|
|
1810
|
+
let errorMessage = "\(#function) No keys passed which can be attached to Key Change Listener on the Session Store. Available arguments: \(data)"
|
|
1811
|
+
reject?("6004", errorMessage, nil)
|
|
1812
|
+
return
|
|
1813
|
+
}
|
|
1814
|
+
|
|
1815
|
+
guard let uniqueId = data["uniqueId"] as? String
|
|
1816
|
+
else {
|
|
1817
|
+
let errorMessage = "\(#function) No uniqueId passed which can be used to attach Key Change Listener on the Session Store. Available arguments: \(data)"
|
|
1818
|
+
reject?("6004", errorMessage, nil)
|
|
1819
|
+
return
|
|
1820
|
+
}
|
|
1821
|
+
|
|
1822
|
+
store.observeChanges(forKeys: keys, changeObserver: { [weak self] key, value in
|
|
1823
|
+
|
|
1824
|
+
var data = [String: Any]()
|
|
1825
|
+
|
|
1826
|
+
data["id"] = self?.id
|
|
1827
|
+
|
|
1828
|
+
data["key"] = key
|
|
1829
|
+
|
|
1830
|
+
if let value = value {
|
|
1831
|
+
if let stringValue = value as? String {
|
|
1832
|
+
data["value"] = stringValue
|
|
1833
|
+
} else {
|
|
1834
|
+
let errorMessage = "\(#function) Session Store value for the key: \(key) is not of String Type. Value: \(value)"
|
|
1835
|
+
print(errorMessage)
|
|
1836
|
+
}
|
|
1837
|
+
}
|
|
1838
|
+
self?.delegate?.emitEvent(HMSConstants.ON_SESSION_STORE_CHANGED, data)
|
|
1839
|
+
|
|
1840
|
+
}) { [weak self] observer, error in
|
|
1841
|
+
|
|
1842
|
+
if let error = error {
|
|
1843
|
+
let errorMessage = "\(#function) Error in observing changes for key: \(keys) in the Session Store. Error: \(error.localizedDescription)"
|
|
1844
|
+
reject?("6004", errorMessage, nil)
|
|
1845
|
+
return
|
|
1846
|
+
}
|
|
1847
|
+
|
|
1848
|
+
guard let observer = observer
|
|
1849
|
+
else {
|
|
1850
|
+
let errorMessage = "\(#function) Unknown Error in observing changes for key: \(keys) in the Session Store."
|
|
1851
|
+
reject?("6004", errorMessage, nil)
|
|
1852
|
+
return
|
|
1853
|
+
}
|
|
1854
|
+
|
|
1855
|
+
guard let self = self
|
|
1856
|
+
else {
|
|
1857
|
+
let errorMessage = "\(#function) Could not find self instance while observing changes for key: \(keys) in the Session Store."
|
|
1858
|
+
reject?("6004", errorMessage, nil)
|
|
1859
|
+
return
|
|
1860
|
+
}
|
|
1861
|
+
|
|
1862
|
+
self.sessionStoreChangeObservers[uniqueId] = observer
|
|
1863
|
+
|
|
1864
|
+
resolve?(true)
|
|
1865
|
+
}
|
|
1866
|
+
}
|
|
1867
|
+
}
|
|
1868
|
+
|
|
1869
|
+
func removeKeyChangeListener(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
|
|
1870
|
+
|
|
1871
|
+
DispatchQueue.main.async { [weak self] in
|
|
1872
|
+
|
|
1873
|
+
guard let store = self?.sessionStore
|
|
1874
|
+
else {
|
|
1875
|
+
let errorMessage = "\(#function) Session Store is null"
|
|
1876
|
+
reject?("6004", errorMessage, nil)
|
|
1877
|
+
return
|
|
1878
|
+
}
|
|
1879
|
+
|
|
1880
|
+
guard let data = data as? [AnyHashable: Any]
|
|
1881
|
+
else {
|
|
1882
|
+
let errorMessage = "\(#function) No arguments passed which can be used to remove Key Change Listener from the Session Store."
|
|
1883
|
+
reject?("6004", errorMessage, nil)
|
|
1884
|
+
return
|
|
1885
|
+
}
|
|
1886
|
+
|
|
1887
|
+
guard let uniqueId = data["uniqueId"] as? String
|
|
1888
|
+
else {
|
|
1889
|
+
let errorMessage = "\(#function) No uniqueId passed which can be used to remove Key Change Listener from the Session Store. Available arguments: \(data)"
|
|
1890
|
+
reject?("6004", errorMessage, nil)
|
|
1891
|
+
return
|
|
1892
|
+
}
|
|
1893
|
+
|
|
1894
|
+
guard let observerToBeRemoved = self?.sessionStoreChangeObservers[uniqueId]
|
|
1895
|
+
else {
|
|
1896
|
+
let errorMessage = "\(#function) No listener found to remove for the uniqueId passed. Available arguments: \(data)"
|
|
1897
|
+
reject?("6004", errorMessage, nil)
|
|
1898
|
+
return
|
|
1899
|
+
}
|
|
1900
|
+
|
|
1901
|
+
self?.sessionStoreChangeObservers.removeValue(forKey: uniqueId)
|
|
1902
|
+
|
|
1903
|
+
store.removeObserver(observerToBeRemoved)
|
|
1904
|
+
|
|
1905
|
+
resolve?(true)
|
|
1906
|
+
}
|
|
1907
|
+
}
|
|
1908
|
+
|
|
1909
|
+
// MARK: - Helper Functions
|
|
1910
|
+
|
|
1911
|
+
// Handle resetting states and data cleanup
|
|
1912
|
+
private func cleanup() {
|
|
1913
|
+
self.config = nil
|
|
1914
|
+
self.recentRoleChangeRequest = nil
|
|
1915
|
+
self.reconnectingStage = false
|
|
1916
|
+
self.preferredExtension = nil
|
|
1917
|
+
self.systemBroadcastPicker = nil
|
|
1918
|
+
self.startScreenshareResolve = nil
|
|
1919
|
+
self.stopScreenshareResolve = nil
|
|
1920
|
+
self.isScreenShared = false
|
|
1921
|
+
self.previewInProgress = false
|
|
1922
|
+
self.networkQualityUpdatesAttached = false
|
|
1923
|
+
self.eventsEnableStatus.removeAll()
|
|
1924
|
+
self.sessionStore = nil
|
|
1925
|
+
self.sessionStoreChangeObservers.removeAll()
|
|
1926
|
+
HMSDecoder.clearRestrictDataStates()
|
|
1507
1927
|
}
|
|
1508
1928
|
|
|
1509
|
-
// MARK: Helper Functions
|
|
1510
1929
|
private func getString(from update: HMSPeerUpdate) -> String {
|
|
1511
1930
|
switch update {
|
|
1512
1931
|
case .peerJoined:
|
|
@@ -1571,9 +1990,32 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
|
|
|
1571
1990
|
}
|
|
1572
1991
|
|
|
1573
1992
|
func emitRequiredKeysError(_ error: String) {
|
|
1574
|
-
if eventsEnableStatus[ON_ERROR] != true {
|
|
1993
|
+
if eventsEnableStatus[HMSConstants.ON_ERROR] != true {
|
|
1575
1994
|
return
|
|
1576
1995
|
}
|
|
1577
|
-
delegate?.emitEvent(ON_ERROR, ["error": ["code":
|
|
1996
|
+
delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 7000, "description": error, "isTerminal": false, "canRetry": true] as [String: Any], "id": id])
|
|
1997
|
+
}
|
|
1998
|
+
|
|
1999
|
+
static private func getDocumentsDirectory() -> URL {
|
|
2000
|
+
let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
|
|
2001
|
+
return paths[0]
|
|
2002
|
+
}
|
|
2003
|
+
|
|
2004
|
+
static private func getTimeStamp() -> String {
|
|
2005
|
+
"\(Date().timeIntervalSince1970)"
|
|
2006
|
+
}
|
|
2007
|
+
}
|
|
2008
|
+
|
|
2009
|
+
extension UIImage {
|
|
2010
|
+
func fixOrientation() -> UIImage? {
|
|
2011
|
+
if self.imageOrientation == UIImage.Orientation.up {
|
|
2012
|
+
return self
|
|
2013
|
+
}
|
|
2014
|
+
|
|
2015
|
+
UIGraphicsBeginImageContext(self.size)
|
|
2016
|
+
self.draw(in: CGRect(origin: .zero, size: self.size))
|
|
2017
|
+
let normalizedImage = UIGraphicsGetImageFromCurrentImageContext()
|
|
2018
|
+
UIGraphicsEndImageContext()
|
|
2019
|
+
return normalizedImage
|
|
1578
2020
|
}
|
|
1579
2021
|
}
|