@100mslive/react-native-hms 1.7.2 → 1.9.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.
Files changed (178) hide show
  1. package/android/build.gradle +3 -3
  2. package/android/local.properties +8 -1
  3. package/android/src/main/java/com/reactnativehmssdk/HMSAudioshareActivity.kt +1 -0
  4. package/android/src/main/java/com/reactnativehmssdk/HMSDecoder.kt +43 -15
  5. package/android/src/main/java/com/reactnativehmssdk/HMSHLSPlayer.kt +113 -68
  6. package/android/src/main/java/com/reactnativehmssdk/HMSHLSPlayerManager.kt +17 -4
  7. package/android/src/main/java/com/reactnativehmssdk/HMSHelper.kt +75 -21
  8. package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +483 -184
  9. package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +587 -177
  10. package/android/src/main/java/com/reactnativehmssdk/HMSSDKViewManager.kt +26 -7
  11. package/android/src/main/java/com/reactnativehmssdk/HMSView.kt +32 -12
  12. package/android/src/main/java/com/reactnativehmssdk/HmsScreenshareActivity.kt +1 -0
  13. package/android/src/main/java/com/reactnativehmssdk/PipActionReceiver.kt +10 -6
  14. package/android/src/main/res/layout/player_view.xml +3 -2
  15. package/ios/HMSConstants.swift +1 -0
  16. package/ios/HMSDecoder.swift +18 -7
  17. package/ios/HMSHLSPlayerManager.swift +18 -2
  18. package/ios/HMSHelper.swift +33 -4
  19. package/ios/HMSManager.m +256 -73
  20. package/ios/HMSManager.swift +47 -3
  21. package/ios/HMSRNSDK.swift +224 -140
  22. package/ios/HMSView.swift +17 -3
  23. package/ios/Hmssdk.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  24. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  25. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcuserdata/jatinnagar.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  26. package/ios/Hmssdk.xcodeproj/xcuserdata/jatinnagar.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  27. package/lib/commonjs/classes/HMSAudioCodec.js +1 -2
  28. package/lib/commonjs/classes/HMSAudioCodec.js.map +1 -1
  29. package/lib/commonjs/classes/HMSAudioDevice.js +1 -2
  30. package/lib/commonjs/classes/HMSAudioDevice.js.map +1 -1
  31. package/lib/commonjs/classes/HMSAudioMixingMode.js +1 -2
  32. package/lib/commonjs/classes/HMSAudioMixingMode.js.map +1 -1
  33. package/lib/commonjs/classes/HMSAudioMode.js +1 -2
  34. package/lib/commonjs/classes/HMSAudioMode.js.map +1 -1
  35. package/lib/commonjs/classes/HMSCameraFacing.js +1 -2
  36. package/lib/commonjs/classes/HMSCameraFacing.js.map +1 -1
  37. package/lib/commonjs/classes/HMSConstants.js +1 -2
  38. package/lib/commonjs/classes/HMSConstants.js.map +1 -1
  39. package/lib/commonjs/classes/HMSEncoder.js +6 -0
  40. package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
  41. package/lib/commonjs/classes/HMSEventEmitter.js +1 -2
  42. package/lib/commonjs/classes/HMSEventEmitter.js.map +1 -1
  43. package/lib/commonjs/classes/HMSIOSAudioMode.js +1 -2
  44. package/lib/commonjs/classes/HMSIOSAudioMode.js.map +1 -1
  45. package/lib/commonjs/classes/HMSLayer.js +1 -2
  46. package/lib/commonjs/classes/HMSLayer.js.map +1 -1
  47. package/lib/commonjs/classes/HMSLogAlarmManager.js +1 -2
  48. package/lib/commonjs/classes/HMSLogAlarmManager.js.map +1 -1
  49. package/lib/commonjs/classes/HMSLogLevel.js +1 -2
  50. package/lib/commonjs/classes/HMSLogLevel.js.map +1 -1
  51. package/lib/commonjs/classes/HMSLogger.js +1 -2
  52. package/lib/commonjs/classes/HMSLogger.js.map +1 -1
  53. package/lib/commonjs/classes/HMSManagerModule.js +1 -2
  54. package/lib/commonjs/classes/HMSManagerModule.js.map +1 -1
  55. package/lib/commonjs/classes/HMSMessageRecipientType.js +1 -2
  56. package/lib/commonjs/classes/HMSMessageRecipientType.js.map +1 -1
  57. package/lib/commonjs/classes/HMSNativeEventListener.js +1 -2
  58. package/lib/commonjs/classes/HMSNativeEventListener.js.map +1 -1
  59. package/lib/commonjs/classes/HMSPIPListenerActions.js +2 -2
  60. package/lib/commonjs/classes/HMSPIPListenerActions.js.map +1 -1
  61. package/lib/commonjs/classes/HMSPeer.js +15 -0
  62. package/lib/commonjs/classes/HMSPeer.js.map +1 -1
  63. package/lib/commonjs/classes/HMSPeerListIterator.js +64 -0
  64. package/lib/commonjs/classes/HMSPeerListIterator.js.map +1 -0
  65. package/lib/commonjs/classes/HMSPeerListIteratorOptions.js +2 -0
  66. package/lib/commonjs/classes/HMSPeerListIteratorOptions.js.map +1 -0
  67. package/lib/commonjs/classes/HMSPeerUpdate.js +3 -4
  68. package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
  69. package/lib/commonjs/classes/HMSPeersCache.js +8 -2
  70. package/lib/commonjs/classes/HMSPeersCache.js.map +1 -1
  71. package/lib/commonjs/classes/HMSQualityLimitationReason.js +1 -2
  72. package/lib/commonjs/classes/HMSQualityLimitationReason.js.map +1 -1
  73. package/lib/commonjs/classes/HMSRoomCache.js +1 -2
  74. package/lib/commonjs/classes/HMSRoomCache.js.map +1 -1
  75. package/lib/commonjs/classes/HMSRoomUpdate.js +1 -2
  76. package/lib/commonjs/classes/HMSRoomUpdate.js.map +1 -1
  77. package/lib/commonjs/classes/HMSSDK.js +192 -32
  78. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  79. package/lib/commonjs/classes/HMSTrackSettingsInitState.js +1 -2
  80. package/lib/commonjs/classes/HMSTrackSettingsInitState.js.map +1 -1
  81. package/lib/commonjs/classes/HMSTrackSource.js +1 -2
  82. package/lib/commonjs/classes/HMSTrackSource.js.map +1 -1
  83. package/lib/commonjs/classes/HMSTrackType.js +1 -2
  84. package/lib/commonjs/classes/HMSTrackType.js.map +1 -1
  85. package/lib/commonjs/classes/HMSTrackUpdate.js +1 -2
  86. package/lib/commonjs/classes/HMSTrackUpdate.js.map +1 -1
  87. package/lib/commonjs/classes/HMSUpdateListenerActions.js +2 -2
  88. package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
  89. package/lib/commonjs/classes/HMSVideoCodec.js +1 -2
  90. package/lib/commonjs/classes/HMSVideoCodec.js.map +1 -1
  91. package/lib/commonjs/classes/HMSVideoViewMode.js +1 -2
  92. package/lib/commonjs/classes/HMSVideoViewMode.js.map +1 -1
  93. package/lib/commonjs/classes/HmsView.js +3 -4
  94. package/lib/commonjs/classes/HmsView.js.map +1 -1
  95. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js +13 -9
  96. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -1
  97. package/lib/commonjs/components/HMSHLSPlayer/RCTHMSHLSPlayer.js +2 -4
  98. package/lib/commonjs/components/HMSHLSPlayer/RCTHMSHLSPlayer.js.map +1 -1
  99. package/lib/commonjs/components/HMSHLSPlayer/hooks.js +5 -10
  100. package/lib/commonjs/components/HMSHLSPlayer/hooks.js.map +1 -1
  101. package/lib/commonjs/hooks/useHMSPeerUpdates.js +2 -2
  102. package/lib/commonjs/hooks/useHMSPeerUpdates.js.map +1 -1
  103. package/lib/commonjs/index.js +1 -2
  104. package/lib/commonjs/index.js.map +1 -1
  105. package/lib/commonjs/stores/hls-player-stats-store.js +1 -2
  106. package/lib/commonjs/stores/hls-player-stats-store.js.map +1 -1
  107. package/lib/commonjs/stores/hms-store.js +1 -2
  108. package/lib/commonjs/stores/hms-store.js.map +1 -1
  109. package/lib/commonjs/types.js +4 -6
  110. package/lib/commonjs/types.js.map +1 -1
  111. package/lib/module/classes/HMSEncoder.js +6 -0
  112. package/lib/module/classes/HMSEncoder.js.map +1 -1
  113. package/lib/module/classes/HMSPIPListenerActions.js +1 -0
  114. package/lib/module/classes/HMSPIPListenerActions.js.map +1 -1
  115. package/lib/module/classes/HMSPeer.js +15 -0
  116. package/lib/module/classes/HMSPeer.js.map +1 -1
  117. package/lib/module/classes/HMSPeerListIterator.js +58 -0
  118. package/lib/module/classes/HMSPeerListIterator.js.map +1 -0
  119. package/lib/module/classes/HMSPeerListIteratorOptions.js +2 -0
  120. package/lib/module/classes/HMSPeerListIteratorOptions.js.map +1 -0
  121. package/lib/module/classes/HMSPeerUpdate.js +2 -1
  122. package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
  123. package/lib/module/classes/HMSPeersCache.js +7 -0
  124. package/lib/module/classes/HMSPeersCache.js.map +1 -1
  125. package/lib/module/classes/HMSSDK.js +193 -33
  126. package/lib/module/classes/HMSSDK.js.map +1 -1
  127. package/lib/module/classes/HMSUpdateListenerActions.js +1 -0
  128. package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
  129. package/lib/module/components/HMSHLSPlayer/HMSHLSPlayer.js +11 -6
  130. package/lib/module/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -1
  131. package/lib/module/index.js.map +1 -1
  132. package/lib/module/types.js +1 -0
  133. package/lib/module/types.js.map +1 -1
  134. package/lib/typescript/classes/HMSEncoder.d.ts +1 -0
  135. package/lib/typescript/classes/HMSPIPListenerActions.d.ts +1 -0
  136. package/lib/typescript/classes/HMSPeer.d.ts +3 -0
  137. package/lib/typescript/classes/HMSPeerListIterator.d.ts +9 -0
  138. package/lib/typescript/classes/HMSPeerListIteratorOptions.d.ts +24 -0
  139. package/lib/typescript/classes/HMSPeerUpdate.d.ts +2 -1
  140. package/lib/typescript/classes/HMSPeersCache.d.ts +1 -0
  141. package/lib/typescript/classes/HMSSDK.d.ts +69 -13
  142. package/lib/typescript/classes/HMSUpdateListenerActions.d.ts +2 -1
  143. package/lib/typescript/index.d.ts +1 -1
  144. package/lib/typescript/types.d.ts +3 -1
  145. package/package.json +1 -1
  146. package/sdk-versions.json +2 -2
  147. package/src/classes/HMSEncoder.ts +9 -0
  148. package/src/classes/HMSPIPListenerActions.ts +1 -0
  149. package/src/classes/HMSPeer.ts +25 -0
  150. package/src/classes/HMSPeerListIterator.ts +60 -0
  151. package/src/classes/HMSPeerListIteratorOptions.ts +26 -0
  152. package/src/classes/HMSPeerUpdate.ts +2 -0
  153. package/src/classes/HMSPeersCache.ts +7 -0
  154. package/src/classes/HMSSDK.tsx +235 -28
  155. package/src/classes/HMSUpdateListenerActions.ts +1 -0
  156. package/src/components/HMSHLSPlayer/HMSHLSPlayer.tsx +15 -13
  157. package/src/index.ts +4 -1
  158. package/src/types.ts +2 -0
  159. package/android/.gradle/6.7.1/executionHistory/executionHistory.bin +0 -0
  160. package/android/.gradle/6.7.1/executionHistory/executionHistory.lock +0 -0
  161. package/android/.gradle/6.7.1/fileChanges/last-build.bin +0 -0
  162. package/android/.gradle/6.7.1/fileHashes/fileHashes.bin +0 -0
  163. package/android/.gradle/6.7.1/fileHashes/fileHashes.lock +0 -0
  164. package/android/.gradle/6.7.1/gc.properties +0 -0
  165. package/android/.gradle/6.9/executionHistory/executionHistory.bin +0 -0
  166. package/android/.gradle/6.9/executionHistory/executionHistory.lock +0 -0
  167. package/android/.gradle/6.9/fileChanges/last-build.bin +0 -0
  168. package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
  169. package/android/.gradle/6.9/fileHashes/fileHashes.lock +0 -0
  170. package/android/.gradle/6.9/gc.properties +0 -0
  171. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  172. package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
  173. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  174. package/android/.gradle/checksums/checksums.lock +0 -0
  175. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  176. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  177. package/android/.gradle/configuration-cache/gc.properties +0 -0
  178. package/android/.gradle/vcs-1/gc.properties +0 -0
@@ -12,9 +12,12 @@ import ReplayKit
12
12
  class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
13
13
 
14
14
  var hms: HMSSDK?
15
- var recentRoleChangeRequest: HMSRoleChangeRequest?
15
+
16
16
  var delegate: HMSManager?
17
17
  var id: String = "12345"
18
+
19
+ private var recentRoleChangeRequest: HMSRoleChangeRequest?
20
+ internal var previewForRoleTracks: [HMSTrack]?
18
21
  private var reconnectingStage: Bool = false
19
22
  private var preferredExtension: String?
20
23
  private var systemBroadcastPicker: RPSystemBroadcastPickerView?
@@ -26,6 +29,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
26
29
  private var eventsEnableStatus: [String: Bool] = [:]
27
30
  private var sessionStore: HMSSessionStore?
28
31
  private var sessionStoreChangeObservers = [String: NSObjectProtocol]()
32
+ private var peerListIterators = [String: HMSPeerListIterator]()
29
33
 
30
34
  // MARK: - Setup
31
35
  init(data: NSDictionary?, delegate manager: HMSManager?, uid id: String) {
@@ -129,25 +133,29 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
129
133
  let roleObj = HMSHelper.getRoleFromRoleName(role, roles: hms?.roles)
130
134
 
131
135
  if let extractedRole = roleObj {
132
- hms?.preview(role: extractedRole, completion: { tracks, error in
133
- if error != nil {
134
- if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
135
- delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": id])
136
+ DispatchQueue.main.async { [weak self] in
137
+ self?.hms?.preview(role: extractedRole) { tracks, error in
138
+ if error != nil {
139
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
140
+ return
136
141
  }
137
- reject?(error?.localizedDescription, error?.localizedDescription, nil)
138
- return
139
- }
140
142
 
141
- let decodedTracks = HMSDecoder.getAllTracks(tracks ?? [])
143
+ self?.previewForRoleTracks = tracks
142
144
 
143
- resolve?(["success": true, "tracks": decodedTracks] as [String: Any])
144
- return
145
- })
145
+ let decodedTracks = HMSDecoder.getAllTracks(tracks ?? [])
146
+
147
+ resolve?(["success": true, "tracks": decodedTracks] as [String: Any])
148
+ }
149
+ }
146
150
  }
147
151
  }
148
152
 
149
- func cancelPreview() {
150
- hms?.cancelPreview()
153
+ func cancelPreview(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
154
+ DispatchQueue.main.async { [weak self] in
155
+ self?.hms?.cancelPreview()
156
+ self?.previewForRoleTracks = nil
157
+ resolve?(["success": true])
158
+ }
151
159
  }
152
160
 
153
161
  func join(_ credentials: NSDictionary) {
@@ -230,7 +238,15 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
230
238
  }
231
239
 
232
240
  DispatchQueue.main.async { [weak self] in
233
- self?.hms?.localPeer?.localAudioTrack()?.setMute(isMute)
241
+ if let audioTrack = self?.hms?.localPeer?.localAudioTrack() {
242
+ audioTrack.setMute(isMute)
243
+ } else if let tracks = self?.previewForRoleTracks {
244
+ if let audioTrack = tracks.first(where: { $0.kind == HMSTrackKind.audio }) as? HMSLocalAudioTrack {
245
+ audioTrack.setMute(isMute)
246
+ }
247
+ } else {
248
+ print(#function, "No local audio track available for setting mute state.")
249
+ }
234
250
  }
235
251
  }
236
252
 
@@ -243,42 +259,54 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
243
259
  }
244
260
 
245
261
  DispatchQueue.main.async { [weak self] in
246
- self?.hms?.localPeer?.localVideoTrack()?.setMute(isMute)
262
+ if let videoTrack = self?.hms?.localPeer?.localVideoTrack() {
263
+ videoTrack.setMute(isMute)
264
+ } else if let tracks = self?.previewForRoleTracks {
265
+ if let videoTrack = tracks.first(where: { $0.kind == HMSTrackKind.video }) as? HMSLocalVideoTrack {
266
+ videoTrack.setMute(isMute)
267
+ }
268
+ } else {
269
+ print(#function, "No local video track available for setting mute state.")
270
+ }
247
271
  }
248
272
  }
249
273
 
250
274
  func switchCamera() {
251
275
  DispatchQueue.main.async { [weak self] in
252
- self?.hms?.localPeer?.localVideoTrack()?.switchCamera()
276
+ if let localVideoTrack = self?.hms?.localPeer?.localVideoTrack() {
277
+ localVideoTrack.switchCamera()
278
+ } else if let tracks = self?.previewForRoleTracks {
279
+ if let videoTrack = tracks.first(where: { $0.kind == HMSTrackKind.video }) as? HMSLocalVideoTrack {
280
+ videoTrack.switchCamera()
281
+ }
282
+ } else {
283
+ print(#function, "No local video track available for switching camera.")
284
+ }
253
285
  }
254
286
  }
255
287
 
256
288
  func leave(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
257
- if reconnectingStage {
258
- reject?("Still in reconnecting stage", "Still in reconnecting stage", nil)
259
- } else {
260
- DispatchQueue.main.async { [weak self] in
289
+ DispatchQueue.main.async { [weak self] in
290
+ guard let strongSelf = self else {
291
+ print(#function, "Could not find reference to self while executing Room leave")
292
+ return
293
+ }
294
+
295
+ strongSelf.hms?.leave { [weak self] success, error in
296
+
261
297
  guard let strongSelf = self else {
262
- print(#function, "Could not find reference to self while executing Room leave")
298
+ print(#function, "Could not find reference to self when callback is received while executing Room leave")
263
299
  return
264
300
  }
265
301
 
266
- strongSelf.hms?.leave { [weak self] success, error in
267
-
268
- guard let strongSelf = self else {
269
- print(#function, "Could not find reference to self when callback is received while executing Room leave")
270
- return
271
- }
272
-
273
- if success {
274
- resolve?(["success": success])
275
- strongSelf.cleanup() // resetting states and doing data cleanup
276
- } else {
277
- if strongSelf.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
278
- strongSelf.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": strongSelf.id])
279
- }
280
- reject?("error in leave", "error in leave", nil)
302
+ if success {
303
+ resolve?(["success": success])
304
+ strongSelf.cleanup() // resetting states and doing data cleanup
305
+ } else {
306
+ if strongSelf.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
307
+ strongSelf.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": strongSelf.id])
281
308
  }
309
+ reject?("error in leave", "error in leave", nil)
282
310
  }
283
311
  }
284
312
  }
@@ -301,9 +329,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
301
329
  resolve?(["messageId": message?.messageID ?? "", "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]] as [String: Any])
302
330
  return
303
331
  } else {
304
- if self?.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
305
- self?.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
306
- }
307
332
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
308
333
  return
309
334
  }
@@ -329,9 +354,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
329
354
  resolve?(["messageId": message?.messageID ?? "", "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]] as [String: Any])
330
355
  return
331
356
  } else {
332
- if self?.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
333
- self?.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
334
- }
335
357
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
336
358
  return
337
359
  }
@@ -351,15 +373,13 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
351
373
 
352
374
  let type = data.value(forKey: "type") as? String ?? "chat"
353
375
  DispatchQueue.main.async { [weak self] in
354
- guard let peer = HMSHelper.getRemotePeerFromPeerId(peerId, remotePeers: self?.hms?.remotePeers) else { return }
376
+ guard let peer = HMSHelper.getPeerFromPeerId(peerId, remotePeers: self?.hms?.remotePeers) else { return }
377
+
355
378
  self?.hms?.sendDirectMessage(type: type, message: message, peer: peer, completion: { message, error in
356
379
  if error == nil {
357
380
  resolve?(["messageId": message?.messageID ?? "", "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]] as [String: Any])
358
381
  return
359
382
  } else {
360
- if self?.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
361
- self?.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
362
- }
363
383
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
364
384
  return
365
385
  }
@@ -383,13 +403,11 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
383
403
  if success {
384
404
  resolve?(["success": success])
385
405
  } else {
386
- if self?.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
387
- self?.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
388
- }
389
406
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
390
407
  }
391
408
  })
392
409
  self?.recentRoleChangeRequest = nil
410
+ self?.previewForRoleTracks = nil
393
411
  }
394
412
  }
395
413
 
@@ -423,9 +441,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
423
441
  if success {
424
442
  resolve?(["success": success])
425
443
  } else {
426
- if self?.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
427
- self?.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
428
- }
429
444
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
430
445
  }
431
446
  })
@@ -461,9 +476,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
461
476
  if success {
462
477
  resolve?(["success": success])
463
478
  } else {
464
- if self?.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
465
- self?.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
466
- }
467
479
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
468
480
  }
469
481
  }
@@ -494,9 +506,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
494
506
  if success {
495
507
  resolve?(["success": success])
496
508
  } else {
497
- if self?.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
498
- self?.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
499
- }
500
509
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
501
510
  }
502
511
  })
@@ -531,9 +540,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
531
540
  if success {
532
541
  resolve?(["success": success])
533
542
  } else {
534
- if self?.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
535
- self?.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
536
- }
537
543
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
538
544
  }
539
545
  })
@@ -557,9 +563,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
557
563
  guard let remotePeers = self?.hms?.remotePeers,
558
564
  let track = HMSHelper.getTrackFromTrackId(trackId, remotePeers)
559
565
  else {
560
- if strongSelf.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
561
- 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])
562
- }
563
566
  reject?("Track not found", "Track not found", nil)
564
567
  return
565
568
  }
@@ -584,25 +587,22 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
584
587
 
585
588
  let reason = data.value(forKey: "reason") as? String
586
589
 
587
- DispatchQueue.main.async { [weak self] in
590
+ HMSHelper.getRemotePeerFromPeerId(peerId, hmsSDK: self.hms) { peer in
588
591
 
589
- guard let remotePeers = self?.hms?.remotePeers,
590
- let peer = HMSHelper.getRemotePeerFromPeerId(peerId, remotePeers: remotePeers)
591
- else {
592
- reject?("PEER_NOT_FOUND", "PEER_NOT_FOUND", nil)
593
- return
594
- }
592
+ DispatchQueue.main.async { [weak self] in
593
+ guard let nonnilPeer = peer else {
594
+ reject?("PEER_NOT_FOUND", "PEER_NOT_FOUND", nil)
595
+ return
596
+ }
595
597
 
596
- self?.hms?.removePeer(peer, reason: reason ?? "Removed from room", completion: { success, error in
597
- if success {
598
- resolve?(["success": success])
599
- } else {
600
- if self?.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
601
- self?.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
598
+ self?.hms?.removePeer(nonnilPeer, reason: reason ?? "Removed from room", completion: { success, error in
599
+ if success {
600
+ resolve?(["success": success])
601
+ } else {
602
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
602
603
  }
603
- reject?(error?.localizedDescription, error?.localizedDescription, nil)
604
- }
605
- })
604
+ })
605
+ }
606
606
  }
607
607
  }
608
608
 
@@ -623,9 +623,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
623
623
  resolve?(["success": success])
624
624
  self?.cleanup() // resetting states and doing data cleanup
625
625
  } else {
626
- if self?.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
627
- self?.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
628
- }
629
626
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
630
627
  }
631
628
  })
@@ -704,9 +701,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
704
701
  resolve?(["success": success])
705
702
  return
706
703
  } else {
707
- if self.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
708
- self.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
709
- }
710
704
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
711
705
  return
712
706
  }
@@ -730,8 +724,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
730
724
 
731
725
  if remoteAudioTrack != nil {
732
726
  remoteAudioTrack?.setVolume(volume)
733
- } else if strongSelf.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
734
- 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])
735
727
  }
736
728
  }
737
729
  }
@@ -754,9 +746,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
754
746
  if let meetLink = URL(string: meetingString) {
755
747
  meetingUrl = meetLink
756
748
  } else {
757
- if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
758
- 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])
759
- }
760
749
  reject?("Invalid meeting url passed", "Invalid meeting url passed", nil)
761
750
  }
762
751
  }
@@ -769,9 +758,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
769
758
  resolve?(["success": success])
770
759
  return
771
760
  } else {
772
- if self.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
773
- self.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
774
- }
775
761
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
776
762
  return
777
763
  }
@@ -784,9 +770,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
784
770
  resolve?(["success": success])
785
771
  return
786
772
  } else {
787
- if self.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
788
- self.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
789
- }
790
773
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
791
774
  return
792
775
  }
@@ -806,9 +789,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
806
789
  resolve?(["success": success])
807
790
  return
808
791
  } else {
809
- if self.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
810
- self.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
811
- }
812
792
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
813
793
  return
814
794
  }
@@ -821,9 +801,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
821
801
  resolve?(["success": success])
822
802
  return
823
803
  } else {
824
- if self.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
825
- self.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
826
- }
827
804
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
828
805
  return
829
806
  }
@@ -843,9 +820,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
843
820
  if success {
844
821
  resolve?(["success": success])
845
822
  } else {
846
- if self.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
847
- self.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self.id])
848
- }
849
823
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
850
824
  }
851
825
  }
@@ -887,9 +861,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
887
861
 
888
862
  func startScreenshare(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
889
863
  guard let preferredExtension = preferredExtension else {
890
- if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
891
- 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])
892
- }
893
864
  reject?("Could not start screen share, preferredExtension not passed in Build method", "Could not start screen share, preferredExtension not passed in Build method", nil)
894
865
  return
895
866
  }
@@ -911,9 +882,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
911
882
 
912
883
  func stopScreenshare(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
913
884
  guard let preferredExtension = preferredExtension else {
914
- if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
915
- 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])
916
- }
917
885
  reject?("Could not start screen share, preferredExtension not passed in Build method", "Could not start screen share, preferredExtension not passed in Build method", nil)
918
886
  return
919
887
  }
@@ -937,6 +905,48 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
937
905
  resolve?(isScreenShared)
938
906
  }
939
907
 
908
+ func raiseLocalPeerHand(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
909
+ self.hms?.raiseLocalPeerHand { success, error in
910
+ if error != nil {
911
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
912
+ return
913
+ }
914
+ resolve?(success)
915
+ }
916
+ }
917
+
918
+ func lowerLocalPeerHand(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
919
+ self.hms?.lowerLocalPeerHand { success, error in
920
+ if error != nil {
921
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
922
+ return
923
+ }
924
+ resolve?(success)
925
+ }
926
+ }
927
+
928
+ func lowerRemotePeerHand(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
929
+ guard let peerId = data.value(forKey: "peerId") as? String else {
930
+ let errorMessage = "lowerRemotePeerHand: " + HMSHelper.getUnavailableRequiredKey(data, ["peerId"])
931
+ reject?(errorMessage, errorMessage, nil)
932
+ return
933
+ }
934
+
935
+ guard let remotePeer = HMSHelper.getPeerFromPeerId(peerId, remotePeers: self.hms?.remotePeers) else {
936
+ let errorMessage = "lowerRemotePeerHand: Could not find remote peer with peerID - " + peerId
937
+ reject?(errorMessage, errorMessage, nil)
938
+ return
939
+ }
940
+
941
+ self.hms?.lowerRemotePeerHand(remotePeer) { success, error in
942
+ if error != nil {
943
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
944
+ return
945
+ }
946
+ resolve?(success)
947
+ }
948
+ }
949
+
940
950
  func playAudioShare(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
941
951
  guard let fileUrl = data.value(forKey: "fileUrl") as? String,
942
952
  let audioNodeName = data.value(forKey: "audioNode") as? String,
@@ -956,21 +966,12 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
956
966
  try audioFilePlayerNode.play(fileUrl: url, loops: loops, interrupts: interrupts)
957
967
  resolve?(["success": true])
958
968
  } catch {
959
- if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
960
- delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 6002, "description": error.localizedDescription, "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
961
- }
962
969
  reject?(error.localizedDescription, error.localizedDescription, nil)
963
970
  }
964
971
  } else {
965
- if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
966
- delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 6002, "description": "Incorrect url", "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
967
- }
968
972
  reject?("Incorrect URL", "Incorrect URL", nil)
969
973
  }
970
974
  } else {
971
- if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
972
- delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
973
- }
974
975
  reject?("AudioFilePlayerNode not found", "AudioFilePlayerNode not found", nil)
975
976
  }
976
977
  }
@@ -1004,8 +1005,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1004
1005
  }
1005
1006
  if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
1006
1007
  audioFilePlayerNode.stop()
1007
- } else if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
1008
- delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
1009
1008
  }
1010
1009
  }
1011
1010
 
@@ -1026,8 +1025,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1026
1025
  delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 6002, "description": error.localizedDescription, "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
1027
1026
  }
1028
1027
  }
1029
- } else if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
1030
- delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
1031
1028
  }
1032
1029
  }
1033
1030
 
@@ -1042,8 +1039,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1042
1039
  }
1043
1040
  if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
1044
1041
  audioFilePlayerNode.pause()
1045
- } else if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
1046
- 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
1042
  }
1048
1043
  }
1049
1044
 
@@ -1060,9 +1055,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1060
1055
  if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
1061
1056
  resolve?(audioFilePlayerNode.isPlaying)
1062
1057
  } else {
1063
- if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
1064
- delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
1065
- }
1066
1058
  reject?("AudioFilePlayerNode not found", "AudioFilePlayerNode not found", nil)
1067
1059
  }
1068
1060
  }
@@ -1080,9 +1072,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1080
1072
  if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
1081
1073
  resolve?(audioFilePlayerNode.currentTime)
1082
1074
  } else {
1083
- if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
1084
- 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])
1085
- }
1086
1075
  reject?("AudioFilePlayerNode not found", "AudioFilePlayerNode not found", nil)
1087
1076
  }
1088
1077
  }
@@ -1100,9 +1089,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1100
1089
  if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
1101
1090
  resolve?(audioFilePlayerNode.duration)
1102
1091
  } else {
1103
- if eventsEnableStatus[HMSConstants.ON_ERROR] == true {
1104
- delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 6002, "description": "AudioFilePlayerNode not found", "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
1105
- }
1106
1092
  reject?("AudioFilePlayerNode not found", "AudioFilePlayerNode not found", nil)
1107
1093
  }
1108
1094
  }
@@ -1200,6 +1186,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1200
1186
  }
1201
1187
  case "metadata":
1202
1188
  return ["metadata": peer.metadata ?? ""]
1189
+ case "isHandRaised":
1190
+ return ["isHandRaised": peer.isHandRaised]
1203
1191
  case "role":
1204
1192
  return ["role": HMSDecoder.getHmsRole(peer.role)]
1205
1193
  case "customerUserID":
@@ -1361,6 +1349,24 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1361
1349
  self.delegate?.emitEvent(HMSConstants.ON_ROOM_UPDATE, ["event": HMSConstants.ON_ROOM_UPDATE, "id": self.id, "type": type, "room": roomData])
1362
1350
  }
1363
1351
 
1352
+ func onPeerListUpdate(added: [HMSPeer], removed: [HMSPeer]) {
1353
+ if eventsEnableStatus["ON_PEER_LIST_UPDATED"] != true {
1354
+ return
1355
+ }
1356
+ var addedPeers = [[String: Any]]()
1357
+ var removedPeers = [[String: Any]]()
1358
+
1359
+ for peer in added {
1360
+ addedPeers.append(HMSDecoder.getHmsPeerSubset(peer))
1361
+ }
1362
+
1363
+ for peer in removed {
1364
+ removedPeers.append(HMSDecoder.getHmsPeerSubset(peer))
1365
+ }
1366
+
1367
+ self.delegate?.emitEvent(HMSConstants.ON_PEER_LIST_UPDATED, ["event": HMSConstants.ON_PEER_LIST_UPDATED, "id": self.id, "addedPeers": addedPeers, "removedPeers": removedPeers])
1368
+ }
1369
+
1364
1370
  func on(peer: HMSPeer, update: HMSPeerUpdate) {
1365
1371
 
1366
1372
  guard let isPeerUpdateEnabled = eventsEnableStatus[HMSConstants.ON_PEER_UPDATE],
@@ -1886,11 +1892,90 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1886
1892
  }
1887
1893
  }
1888
1894
 
1895
+ // MARK: - Peer List Iterator
1896
+
1897
+ func getPeerListIterator(_ data: NSDictionary) -> [AnyHashable: Any]? {
1898
+ guard let uniqueId = data["uniqueId"] as? String else {
1899
+ print("Error in getPeerListIterator: uniqueId is not available")
1900
+ return nil
1901
+ }
1902
+
1903
+ guard let hmssdk = hms else {
1904
+ print("Error in getPeerListIterator: HMSSDK is not available")
1905
+ return nil
1906
+ }
1907
+
1908
+ var peerListIterator: HMSPeerListIterator
1909
+
1910
+ if let peerListIteratorOptions = HMSHelper.getPeerListIteratorOptions(data) {
1911
+ peerListIterator = hmssdk.getPeerListIterator(options: peerListIteratorOptions)
1912
+ } else {
1913
+ peerListIterator = hmssdk.getPeerListIterator()
1914
+ }
1915
+
1916
+ peerListIterators[uniqueId] = peerListIterator
1917
+
1918
+ return [
1919
+ "success": true,
1920
+ "uniqueId": uniqueId,
1921
+ "totalCount": peerListIterator.totalCount
1922
+ ]
1923
+ }
1924
+
1925
+ func peerListIteratorHasNext(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
1926
+ guard let uniqueId = data["uniqueId"] as? String else {
1927
+ let errorMessage = "\(#function) uniqueId is not available"
1928
+ reject?("6004", errorMessage, nil)
1929
+ return
1930
+ }
1931
+
1932
+ guard let peerListIterator = peerListIterators[uniqueId] else {
1933
+ let errorMessage = "\(#function) HMSPeerListIterator is not available for uniqueId - \(uniqueId)"
1934
+ reject?("6004", errorMessage, nil)
1935
+ return
1936
+ }
1937
+
1938
+ resolve?(peerListIterator.hasNext)
1939
+ }
1940
+
1941
+ func peerListIteratorNext(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
1942
+ guard let uniqueId = data["uniqueId"] as? String else {
1943
+ let errorMessage = "\(#function) uniqueId is not available"
1944
+ reject?("6004", errorMessage, nil)
1945
+ return
1946
+ }
1947
+
1948
+ guard let peerListIterator = peerListIterators[uniqueId] else {
1949
+ let errorMessage = "\(#function) HMSPeerListIterator is not available for uniqueId - \(uniqueId)"
1950
+ reject?("6004", errorMessage, nil)
1951
+ return
1952
+ }
1953
+
1954
+ peerListIterator.next { peers, error in
1955
+ if let nonnilError = error {
1956
+ reject?("6004", nonnilError.localizedDescription, nil)
1957
+ return
1958
+ }
1959
+
1960
+ if let nonnilPeers = peers {
1961
+ var data = [[String: Any]]()
1962
+ for peer in nonnilPeers {
1963
+ data.append(HMSDecoder.getHmsPeer(peer))
1964
+ }
1965
+ resolve?(["totalCount": peerListIterator.totalCount, "peers": data])
1966
+ } else {
1967
+ let errorMessage = "\(#function) peers is nil"
1968
+ reject?("6004", errorMessage, nil)
1969
+ }
1970
+ }
1971
+ }
1972
+
1889
1973
  // MARK: - Helper Functions
1890
1974
 
1891
1975
  // Handle resetting states and data cleanup
1892
1976
  private func cleanup() {
1893
1977
  self.recentRoleChangeRequest = nil
1978
+ self.previewForRoleTracks = nil
1894
1979
  self.reconnectingStage = false
1895
1980
  self.preferredExtension = nil
1896
1981
  self.systemBroadcastPicker = nil
@@ -1902,6 +1987,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1902
1987
  self.eventsEnableStatus.removeAll()
1903
1988
  self.sessionStore = nil
1904
1989
  self.sessionStoreChangeObservers.removeAll()
1990
+ self.peerListIterators.removeAll()
1905
1991
  HMSDecoder.clearRestrictDataStates()
1906
1992
  }
1907
1993
 
@@ -1949,9 +2035,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1949
2035
 
1950
2036
  func getString(from update: HMSRoomUpdate) -> String {
1951
2037
  switch update {
1952
- case .roomTypeChanged:
1953
- return "ROOM_PEER_COUNT_UPDATED"
1954
- case .metaDataUpdated:
2038
+ case .roomTypeChanged, .metaDataUpdated, .peerCountUpdated:
1955
2039
  return "ROOM_PEER_COUNT_UPDATED"
1956
2040
  case .browserRecordingStateUpdated:
1957
2041
  return "BROWSER_RECORDING_STATE_UPDATED"