@100mslive/react-native-hms 1.8.0 → 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 (152) hide show
  1. package/android/build.gradle +3 -3
  2. package/android/local.properties +8 -1
  3. package/android/src/main/java/com/reactnativehmssdk/HMSDecoder.kt +15 -5
  4. package/android/src/main/java/com/reactnativehmssdk/HMSHelper.kt +43 -5
  5. package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +120 -25
  6. package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +220 -26
  7. package/ios/HMSConstants.swift +1 -0
  8. package/ios/HMSDecoder.swift +16 -5
  9. package/ios/HMSHelper.swift +33 -4
  10. package/ios/HMSManager.m +26 -0
  11. package/ios/HMSManager.swift +45 -1
  12. package/ios/HMSRNSDK.swift +158 -15
  13. package/ios/Hmssdk.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  14. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  15. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcuserdata/jatinnagar.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  16. package/ios/Hmssdk.xcodeproj/xcuserdata/jatinnagar.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  17. package/lib/commonjs/classes/HMSAudioCodec.js +1 -2
  18. package/lib/commonjs/classes/HMSAudioCodec.js.map +1 -1
  19. package/lib/commonjs/classes/HMSAudioDevice.js +1 -2
  20. package/lib/commonjs/classes/HMSAudioDevice.js.map +1 -1
  21. package/lib/commonjs/classes/HMSAudioMixingMode.js +1 -2
  22. package/lib/commonjs/classes/HMSAudioMixingMode.js.map +1 -1
  23. package/lib/commonjs/classes/HMSAudioMode.js +1 -2
  24. package/lib/commonjs/classes/HMSAudioMode.js.map +1 -1
  25. package/lib/commonjs/classes/HMSCameraFacing.js +1 -2
  26. package/lib/commonjs/classes/HMSCameraFacing.js.map +1 -1
  27. package/lib/commonjs/classes/HMSConstants.js +1 -2
  28. package/lib/commonjs/classes/HMSConstants.js.map +1 -1
  29. package/lib/commonjs/classes/HMSEventEmitter.js +1 -2
  30. package/lib/commonjs/classes/HMSEventEmitter.js.map +1 -1
  31. package/lib/commonjs/classes/HMSIOSAudioMode.js +1 -2
  32. package/lib/commonjs/classes/HMSIOSAudioMode.js.map +1 -1
  33. package/lib/commonjs/classes/HMSLayer.js +1 -2
  34. package/lib/commonjs/classes/HMSLayer.js.map +1 -1
  35. package/lib/commonjs/classes/HMSLogAlarmManager.js +1 -2
  36. package/lib/commonjs/classes/HMSLogAlarmManager.js.map +1 -1
  37. package/lib/commonjs/classes/HMSLogLevel.js +1 -2
  38. package/lib/commonjs/classes/HMSLogLevel.js.map +1 -1
  39. package/lib/commonjs/classes/HMSLogger.js +1 -2
  40. package/lib/commonjs/classes/HMSLogger.js.map +1 -1
  41. package/lib/commonjs/classes/HMSManagerModule.js +1 -2
  42. package/lib/commonjs/classes/HMSManagerModule.js.map +1 -1
  43. package/lib/commonjs/classes/HMSMessageRecipientType.js +1 -2
  44. package/lib/commonjs/classes/HMSMessageRecipientType.js.map +1 -1
  45. package/lib/commonjs/classes/HMSNativeEventListener.js +1 -2
  46. package/lib/commonjs/classes/HMSNativeEventListener.js.map +1 -1
  47. package/lib/commonjs/classes/HMSPIPListenerActions.js +2 -2
  48. package/lib/commonjs/classes/HMSPIPListenerActions.js.map +1 -1
  49. package/lib/commonjs/classes/HMSPeer.js +15 -0
  50. package/lib/commonjs/classes/HMSPeer.js.map +1 -1
  51. package/lib/commonjs/classes/HMSPeerListIterator.js +64 -0
  52. package/lib/commonjs/classes/HMSPeerListIterator.js.map +1 -0
  53. package/lib/commonjs/classes/HMSPeerListIteratorOptions.js +2 -0
  54. package/lib/commonjs/classes/HMSPeerListIteratorOptions.js.map +1 -0
  55. package/lib/commonjs/classes/HMSPeerUpdate.js +3 -4
  56. package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
  57. package/lib/commonjs/classes/HMSPeersCache.js +8 -2
  58. package/lib/commonjs/classes/HMSPeersCache.js.map +1 -1
  59. package/lib/commonjs/classes/HMSQualityLimitationReason.js +1 -2
  60. package/lib/commonjs/classes/HMSQualityLimitationReason.js.map +1 -1
  61. package/lib/commonjs/classes/HMSRoomCache.js +1 -2
  62. package/lib/commonjs/classes/HMSRoomCache.js.map +1 -1
  63. package/lib/commonjs/classes/HMSRoomUpdate.js +1 -2
  64. package/lib/commonjs/classes/HMSRoomUpdate.js.map +1 -1
  65. package/lib/commonjs/classes/HMSSDK.js +152 -6
  66. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  67. package/lib/commonjs/classes/HMSTrackSettingsInitState.js +1 -2
  68. package/lib/commonjs/classes/HMSTrackSettingsInitState.js.map +1 -1
  69. package/lib/commonjs/classes/HMSTrackSource.js +1 -2
  70. package/lib/commonjs/classes/HMSTrackSource.js.map +1 -1
  71. package/lib/commonjs/classes/HMSTrackType.js +1 -2
  72. package/lib/commonjs/classes/HMSTrackType.js.map +1 -1
  73. package/lib/commonjs/classes/HMSTrackUpdate.js +1 -2
  74. package/lib/commonjs/classes/HMSTrackUpdate.js.map +1 -1
  75. package/lib/commonjs/classes/HMSUpdateListenerActions.js +2 -2
  76. package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
  77. package/lib/commonjs/classes/HMSVideoCodec.js +1 -2
  78. package/lib/commonjs/classes/HMSVideoCodec.js.map +1 -1
  79. package/lib/commonjs/classes/HMSVideoViewMode.js +1 -2
  80. package/lib/commonjs/classes/HMSVideoViewMode.js.map +1 -1
  81. package/lib/commonjs/classes/HmsView.js +3 -4
  82. package/lib/commonjs/classes/HmsView.js.map +1 -1
  83. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js +3 -4
  84. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -1
  85. package/lib/commonjs/components/HMSHLSPlayer/RCTHMSHLSPlayer.js +2 -4
  86. package/lib/commonjs/components/HMSHLSPlayer/RCTHMSHLSPlayer.js.map +1 -1
  87. package/lib/commonjs/components/HMSHLSPlayer/hooks.js +5 -10
  88. package/lib/commonjs/components/HMSHLSPlayer/hooks.js.map +1 -1
  89. package/lib/commonjs/hooks/useHMSPeerUpdates.js +2 -2
  90. package/lib/commonjs/hooks/useHMSPeerUpdates.js.map +1 -1
  91. package/lib/commonjs/index.js +1 -2
  92. package/lib/commonjs/index.js.map +1 -1
  93. package/lib/commonjs/stores/hls-player-stats-store.js +1 -2
  94. package/lib/commonjs/stores/hls-player-stats-store.js.map +1 -1
  95. package/lib/commonjs/stores/hms-store.js +1 -2
  96. package/lib/commonjs/stores/hms-store.js.map +1 -1
  97. package/lib/commonjs/types.js +3 -6
  98. package/lib/commonjs/types.js.map +1 -1
  99. package/lib/module/classes/HMSPIPListenerActions.js +1 -0
  100. package/lib/module/classes/HMSPIPListenerActions.js.map +1 -1
  101. package/lib/module/classes/HMSPeer.js +15 -0
  102. package/lib/module/classes/HMSPeer.js.map +1 -1
  103. package/lib/module/classes/HMSPeerListIterator.js +58 -0
  104. package/lib/module/classes/HMSPeerListIterator.js.map +1 -0
  105. package/lib/module/classes/HMSPeerListIteratorOptions.js +2 -0
  106. package/lib/module/classes/HMSPeerListIteratorOptions.js.map +1 -0
  107. package/lib/module/classes/HMSPeerUpdate.js +2 -1
  108. package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
  109. package/lib/module/classes/HMSPeersCache.js +7 -0
  110. package/lib/module/classes/HMSPeersCache.js.map +1 -1
  111. package/lib/module/classes/HMSSDK.js +153 -7
  112. package/lib/module/classes/HMSSDK.js.map +1 -1
  113. package/lib/module/classes/HMSUpdateListenerActions.js +1 -0
  114. package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
  115. package/lib/typescript/classes/HMSPIPListenerActions.d.ts +1 -0
  116. package/lib/typescript/classes/HMSPeer.d.ts +3 -0
  117. package/lib/typescript/classes/HMSPeerListIterator.d.ts +9 -0
  118. package/lib/typescript/classes/HMSPeerListIteratorOptions.d.ts +24 -0
  119. package/lib/typescript/classes/HMSPeerUpdate.d.ts +2 -1
  120. package/lib/typescript/classes/HMSPeersCache.d.ts +1 -0
  121. package/lib/typescript/classes/HMSSDK.d.ts +46 -1
  122. package/lib/typescript/classes/HMSUpdateListenerActions.d.ts +2 -1
  123. package/package.json +1 -1
  124. package/sdk-versions.json +2 -2
  125. package/src/classes/HMSPIPListenerActions.ts +1 -0
  126. package/src/classes/HMSPeer.ts +25 -0
  127. package/src/classes/HMSPeerListIterator.ts +60 -0
  128. package/src/classes/HMSPeerListIteratorOptions.ts +26 -0
  129. package/src/classes/HMSPeerUpdate.ts +2 -0
  130. package/src/classes/HMSPeersCache.ts +7 -0
  131. package/src/classes/HMSSDK.tsx +187 -4
  132. package/src/classes/HMSUpdateListenerActions.ts +1 -0
  133. package/android/.gradle/6.7.1/executionHistory/executionHistory.bin +0 -0
  134. package/android/.gradle/6.7.1/executionHistory/executionHistory.lock +0 -0
  135. package/android/.gradle/6.7.1/fileChanges/last-build.bin +0 -0
  136. package/android/.gradle/6.7.1/fileHashes/fileHashes.bin +0 -0
  137. package/android/.gradle/6.7.1/fileHashes/fileHashes.lock +0 -0
  138. package/android/.gradle/6.7.1/gc.properties +0 -0
  139. package/android/.gradle/6.9/executionHistory/executionHistory.bin +0 -0
  140. package/android/.gradle/6.9/executionHistory/executionHistory.lock +0 -0
  141. package/android/.gradle/6.9/fileChanges/last-build.bin +0 -0
  142. package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
  143. package/android/.gradle/6.9/fileHashes/fileHashes.lock +0 -0
  144. package/android/.gradle/6.9/gc.properties +0 -0
  145. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  146. package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
  147. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  148. package/android/.gradle/checksums/checksums.lock +0 -0
  149. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  150. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  151. package/android/.gradle/configuration-cache/gc.properties +0 -0
  152. package/android/.gradle/vcs-1/gc.properties +0 -0
@@ -12,6 +12,7 @@ import live.hms.video.error.HMSException
12
12
  import live.hms.video.media.settings.HMSLayer
13
13
  import live.hms.video.media.tracks.*
14
14
  import live.hms.video.sdk.*
15
+ import live.hms.video.sdk.listeners.PeerListResultListener
15
16
  import live.hms.video.sdk.models.*
16
17
  import live.hms.video.sdk.models.enums.AudioMixingMode
17
18
  import live.hms.video.sdk.models.enums.HMSPeerUpdate
@@ -50,6 +51,7 @@ class HMSRNSDK(
50
51
  private var eventsEnableStatus = mutableMapOf<String, Boolean>()
51
52
  private var sessionStore: HmsSessionStore? = null
52
53
  private val keyChangeObservers = mutableMapOf<String, HMSKeyChangeListener?>()
54
+ private val peerListIterators = mutableMapOf<String, PeerListIterator>()
53
55
 
54
56
  init {
55
57
  val builder = HMSSDK.Builder(reactApplicationContext)
@@ -131,6 +133,7 @@ class HMSRNSDK(
131
133
  eventsEnableStatus.clear()
132
134
  sessionStore = null
133
135
  keyChangeObservers.clear()
136
+ peerListIterators.clear()
134
137
  HMSDecoder.clearRestrictDataStates()
135
138
  }
136
139
 
@@ -241,6 +244,34 @@ class HMSRNSDK(
241
244
  data.putString("id", id)
242
245
  delegate.emitEvent("ON_PREVIEW", data)
243
246
  }
247
+
248
+ /*
249
+ override fun peerListUpdated(addedPeers: ArrayList<HMSPeer>?, removedPeers: ArrayList<HMSPeer>?) {
250
+
251
+ if (eventsEnableStatus["ON_PEER_LIST_UPDATED"] != true) {
252
+ return
253
+ }
254
+ val data: WritableMap = Arguments.createMap()
255
+ val addedPeersArray: WritableArray = Arguments.createArray()
256
+ val removedPeersArray: WritableArray = Arguments.createArray()
257
+
258
+ if (addedPeers != null) {
259
+ for (peer in addedPeers) {
260
+ addedPeersArray.pushMap(HMSDecoder.getHmsPeerSubset(peer))
261
+ }
262
+ }
263
+
264
+ if (removedPeers != null) {
265
+ for (peer in removedPeers) {
266
+ removedPeersArray.pushMap(HMSDecoder.getHmsPeerSubset(peer))
267
+ }
268
+ }
269
+
270
+ data.putArray("addedPeers", addedPeersArray)
271
+ data.putArray("removedPeers", removedPeersArray)
272
+ delegate.emitEvent("ON_PEER_LIST_UPDATED", data)
273
+ }
274
+ */
244
275
  },
245
276
  )
246
277
  } else {
@@ -440,6 +471,35 @@ class HMSRNSDK(
440
471
  data.putString("id", id)
441
472
  delegate.emitEvent("ON_SESSION_STORE_AVAILABLE", data)
442
473
  }
474
+
475
+ override fun peerListUpdated(
476
+ addedPeers: ArrayList<HMSPeer>?,
477
+ removedPeers: ArrayList<HMSPeer>?,
478
+ ) {
479
+ if (eventsEnableStatus["ON_PEER_LIST_UPDATED"] != true) {
480
+ return
481
+ }
482
+ val data: WritableMap = Arguments.createMap()
483
+ val addedPeersArray: WritableArray = Arguments.createArray()
484
+ val removedPeersArray: WritableArray = Arguments.createArray()
485
+
486
+ if (addedPeers != null) {
487
+ for (peer in addedPeers) {
488
+ addedPeersArray.pushMap(HMSDecoder.getHmsPeerSubset(peer))
489
+ }
490
+ }
491
+
492
+ if (removedPeers != null) {
493
+ for (peer in removedPeers) {
494
+ removedPeersArray.pushMap(HMSDecoder.getHmsPeerSubset(peer))
495
+ }
496
+ }
497
+
498
+ data.putString("id", id)
499
+ data.putArray("addedPeers", addedPeersArray)
500
+ data.putArray("removedPeers", removedPeersArray)
501
+ delegate.emitEvent("ON_PEER_LIST_UPDATED", data)
502
+ }
443
503
  },
444
504
  )
445
505
  } catch (e: HMSException) {
@@ -1054,30 +1114,31 @@ class HMSRNSDK(
1054
1114
  arrayOf(Pair("peerId", "String"), Pair("reason", "String")),
1055
1115
  )
1056
1116
  if (requiredKeys === null) {
1057
- val peerId = data.getString("peerId")
1058
- val peer = HMSHelper.getRemotePeerFromPeerId(peerId, hmsSDK?.getRoom())
1117
+ HMSCoroutineScope.launch {
1118
+ val peerId = data.getString("peerId")
1059
1119
 
1060
- if (peer != null) {
1061
- hmsSDK?.removePeerRequest(
1062
- peer,
1063
- data.getString("reason") as String,
1064
- object : HMSActionResultListener {
1065
- override fun onSuccess() {
1066
- callback?.resolve(emitHMSSuccess())
1067
- }
1120
+ val peer = HMSHelper.getRemotePeerFromPeerId(peerId, hmsSDK)
1068
1121
 
1069
- override fun onError(error: HMSException) {
1070
- callback?.reject(error.code.toString(), error.message)
1071
- }
1072
- },
1073
- )
1074
- } else {
1075
- self.emitCustomError("PEER_NOT_FOUND")
1076
- callback?.reject("101", "PEER_NOT_FOUND")
1122
+ if (peer != null) {
1123
+ hmsSDK?.removePeerRequest(
1124
+ peer,
1125
+ data.getString("reason") as String,
1126
+ object : HMSActionResultListener {
1127
+ override fun onSuccess() {
1128
+ callback?.resolve(emitHMSSuccess())
1129
+ }
1130
+
1131
+ override fun onError(error: HMSException) {
1132
+ callback?.reject(error.code.toString(), error.message)
1133
+ }
1134
+ },
1135
+ )
1136
+ } else {
1137
+ callback?.reject("101", "PEER_NOT_FOUND")
1138
+ }
1077
1139
  }
1078
1140
  } else {
1079
1141
  val errorMessage = "removePeer: $requiredKeys"
1080
- self.emitRequiredKeysError(errorMessage)
1081
1142
  rejectCallback(callback, errorMessage)
1082
1143
  }
1083
1144
  }
@@ -1221,13 +1282,10 @@ class HMSRNSDK(
1221
1282
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("mute", "Boolean")))
1222
1283
  if (requiredKeys === null) {
1223
1284
  val mute = data.getBoolean("mute")
1224
- val peers = hmsSDK?.getRemotePeers()
1225
- if (peers != null) {
1226
- for (remotePeer in peers) {
1227
- val peerId = remotePeer.peerID
1228
- val peer = HMSHelper.getRemotePeerFromPeerId(peerId, hmsSDK?.getRoom())
1229
- peer?.audioTrack?.isPlaybackAllowed = !mute
1230
- }
1285
+ val remotePeers = hmsSDK?.getRemotePeers()
1286
+
1287
+ remotePeers?.forEach() {
1288
+ it.audioTrack?.isPlaybackAllowed = !mute
1231
1289
  }
1232
1290
  } else {
1233
1291
  val errorMessage = "setPlaybackForAllAudio: $requiredKeys"
@@ -1733,6 +1791,9 @@ class HMSRNSDK(
1733
1791
  "role" -> {
1734
1792
  result.putMap("role", HMSDecoder.getHmsRole(peer.hmsRole))
1735
1793
  }
1794
+ "isHandRaised" -> {
1795
+ result.putBoolean("isHandRaised", peer.isHandRaised)
1796
+ }
1736
1797
  "customerUserID" -> {
1737
1798
  if (peer.customerUserID !== null) {
1738
1799
  result.putString("customerUserID", peer.customerUserID)
@@ -2308,4 +2369,137 @@ class HMSRNSDK(
2308
2369
  },
2309
2370
  )
2310
2371
  }
2372
+
2373
+ fun raiseLocalPeerHand(
2374
+ data: ReadableMap,
2375
+ promise: Promise?,
2376
+ ) {
2377
+ hmsSDK?.raiseLocalPeerHand(
2378
+ object : HMSActionResultListener {
2379
+ override fun onError(error: HMSException) {
2380
+ promise?.reject(error.code.toString(), error.message)
2381
+ }
2382
+
2383
+ override fun onSuccess() {
2384
+ promise?.resolve(true)
2385
+ }
2386
+ },
2387
+ )
2388
+ }
2389
+
2390
+ fun lowerLocalPeerHand(
2391
+ data: ReadableMap,
2392
+ promise: Promise?,
2393
+ ) {
2394
+ hmsSDK?.lowerLocalPeerHand(
2395
+ object : HMSActionResultListener {
2396
+ override fun onError(error: HMSException) {
2397
+ promise?.reject(error.code.toString(), error.message)
2398
+ }
2399
+
2400
+ override fun onSuccess() {
2401
+ promise?.resolve(true)
2402
+ }
2403
+ },
2404
+ )
2405
+ }
2406
+
2407
+ fun lowerRemotePeerHand(
2408
+ data: ReadableMap,
2409
+ promise: Promise?,
2410
+ ) {
2411
+ val peerId = data.getString("peerId")
2412
+ peerId?.let { peerID ->
2413
+ hmsSDK?.getRoom()?.let { room ->
2414
+ val peer = HMSHelper.getPeerFromPeerId(peerID, room)
2415
+ peer?.let { peer ->
2416
+ hmsSDK?.lowerRemotePeerHand(
2417
+ forPeer = peer,
2418
+ object : HMSActionResultListener {
2419
+ override fun onError(error: HMSException) {
2420
+ promise?.reject(error.code.toString(), error.message)
2421
+ }
2422
+
2423
+ override fun onSuccess() {
2424
+ promise?.resolve(true)
2425
+ }
2426
+ },
2427
+ )
2428
+ }
2429
+ }
2430
+ }
2431
+ }
2432
+
2433
+ fun getPeerListIterator(data: ReadableMap): WritableMap? {
2434
+ val uniqueId = data.getString("uniqueId")
2435
+ if (uniqueId == null) {
2436
+ print("Error in getPeerListIterator: uniqueId is not available")
2437
+ return null
2438
+ }
2439
+
2440
+ val options = HMSHelper.getPeerListIteratorOptions(data)
2441
+
2442
+ hmsSDK?.let {
2443
+ val iterator = it.getPeerListIterator(options)
2444
+
2445
+ peerListIterators[uniqueId] = iterator
2446
+ val map = Arguments.createMap()
2447
+ map.putBoolean("success", true)
2448
+ map.putString("uniqueId", uniqueId)
2449
+ return map
2450
+ }
2451
+ print("Error in getPeerListIterator: HMS SDK is not available")
2452
+ return null
2453
+ }
2454
+
2455
+ fun peerListIteratorHasNext(
2456
+ data: ReadableMap,
2457
+ promise: Promise?,
2458
+ ) {
2459
+ val uniqueId = data.getString("uniqueId")
2460
+
2461
+ peerListIterators[uniqueId]?.let {
2462
+ promise?.resolve(it.hasNext())
2463
+ return
2464
+ }
2465
+ promise?.reject("101", "PeerListIterator is not available")
2466
+ }
2467
+
2468
+ fun peerListIteratorNext(
2469
+ data: ReadableMap,
2470
+ promise: Promise?,
2471
+ ) {
2472
+ val uniqueId = data.getString("uniqueId")
2473
+
2474
+ val peerListIterator = peerListIterators[uniqueId]
2475
+
2476
+ if (peerListIterator == null) {
2477
+ promise?.reject("101", "PeerListIterator is not available")
2478
+ return
2479
+ }
2480
+
2481
+ peerListIterator.next(
2482
+ object : PeerListResultListener {
2483
+ override fun onError(error: HMSException) {
2484
+ promise?.reject(error.code.toString(), error.message)
2485
+ }
2486
+
2487
+ override fun onSuccess(result: ArrayList<HMSPeer>) {
2488
+ val resultData: WritableMap = Arguments.createMap()
2489
+
2490
+ resultData.putInt("totalCount", peerListIterator.totalCount)
2491
+
2492
+ val array: WritableArray = Arguments.createArray()
2493
+ for (peer in result) {
2494
+ val hmsPeer = HMSDecoder.getHmsPeer(peer)
2495
+ array.pushMap(hmsPeer)
2496
+ }
2497
+
2498
+ resultData.putArray("peers", array)
2499
+
2500
+ promise?.resolve(resultData)
2501
+ }
2502
+ },
2503
+ )
2504
+ }
2311
2505
  }
@@ -14,6 +14,7 @@ struct HMSConstants {
14
14
  static let ON_JOIN = "ON_JOIN"
15
15
  static let ON_ROOM_UPDATE = "ON_ROOM_UPDATE"
16
16
  static let ON_PEER_UPDATE = "3"
17
+ static let ON_PEER_LIST_UPDATED = "ON_PEER_LIST_UPDATED"
17
18
  static let ON_TRACK_UPDATE = "ON_TRACK_UPDATE"
18
19
  static let ON_ROLE_CHANGE_REQUEST = "ON_ROLE_CHANGE_REQUEST"
19
20
  static let ON_CHANGE_TRACK_STATE_REQUEST = "ON_CHANGE_TRACK_STATE_REQUEST"
@@ -93,6 +93,7 @@ class HMSDecoder: NSObject {
93
93
  case .nameUpdated: return "5"
94
94
  case .metadataUpdated: return "6"
95
95
  case .networkQualityUpdated: return "7"
96
+ case .handRaiseUpdated: return "8"
96
97
  default: return nil
97
98
  }
98
99
  }
@@ -112,6 +113,9 @@ class HMSDecoder: NSObject {
112
113
  case .metadataUpdated:
113
114
  peerDict["metadata"] = peer.metadata ?? ""
114
115
  return peerDict
116
+ case .handRaiseUpdated:
117
+ peerDict["isHandRaised"] = peer.isHandRaised
118
+ return peerDict
115
119
  case .roleUpdated:
116
120
  peerDict["role"] = getHmsRole(peer.role)
117
121
  return peerDict
@@ -138,6 +142,9 @@ class HMSDecoder: NSObject {
138
142
  case .metadataUpdated:
139
143
  peerDict["metadata"] = peer.metadata ?? ""
140
144
  return peerDict
145
+ case .handRaiseUpdated:
146
+ peerDict["isHandRaised"] = peer.isHandRaised
147
+ return peerDict
141
148
  case .roleUpdated:
142
149
  peerDict["role"] = getHmsRole(peer.role)
143
150
  return peerDict
@@ -167,6 +174,7 @@ class HMSDecoder: NSObject {
167
174
  if let metadata = peer.metadata {
168
175
  data["metadata"] = metadata
169
176
  }
177
+ data["isHandRaised"] = peer.isHandRaised
170
178
 
171
179
  // joinedAt
172
180
 
@@ -883,16 +891,19 @@ class HMSDecoder: NSObject {
883
891
  }
884
892
 
885
893
  static func getRemoteVideoStats(_ data: HMSRemoteVideoStats) -> [Any] {
886
- // [bitrate, bytesReceived, frameRate, jitter, packetsLost, packetsReceived, resolution]
887
- return [
894
+
895
+ var stats = [Any]()
896
+
897
+ stats = [
888
898
  data.bitrate,
889
- data.bytesReceived,
899
+ Double(data.bytesReceived),
890
900
  data.frameRate,
891
901
  data.jitter,
892
- data.packetsLost,
893
- data.packetsReceived,
902
+ Double(data.packetsLost),
903
+ Double(data.packetsReceived),
894
904
  HMSDecoder.getHmsVideoResolution(data.resolution)
895
905
  ]
906
+ return stats
896
907
  }
897
908
 
898
909
  static func getHmsMessageRecipient(_ recipient: HMSMessageRecipient) -> [String: Any] {
@@ -17,7 +17,7 @@ class HMSHelper: NSObject {
17
17
  return "SEND_ALL_REQUIRED_KEYS"
18
18
  }
19
19
 
20
- static func getPeerFromPeerId(_ peerID: String?, remotePeers: [HMSRemotePeer]?, localPeer: HMSLocalPeer?) -> HMSPeer? {
20
+ static func getPeerFromPeerId(_ peerID: String?, remotePeers: [HMSRemotePeer]?, localPeer: HMSLocalPeer? = nil) -> HMSPeer? {
21
21
 
22
22
  guard let peerID = peerID, let peers = remotePeers else { return nil }
23
23
  if peerID == localPeer?.peerID {
@@ -26,11 +26,25 @@ class HMSHelper: NSObject {
26
26
  return peers.first { $0.peerID == peerID }
27
27
  }
28
28
 
29
- static func getRemotePeerFromPeerId(_ peerID: String?, remotePeers: [HMSRemotePeer]?) -> HMSPeer? {
29
+ static func getRemotePeerFromPeerId(_ peerID: String?, hmsSDK: HMSSDK?, completion: @escaping (_ peer: HMSPeer?) -> Void) {
30
+ guard let peerID = peerID, let hms = hmsSDK, let peers = hms.remotePeers else {
31
+ completion(nil)
32
+ return
33
+ }
30
34
 
31
- guard let peerID = peerID, let peers = remotePeers else { return nil }
35
+ if let peerFromList = peers.first(where: { $0.peerID == peerID }) {
36
+ completion(peerFromList)
37
+ return
38
+ }
32
39
 
33
- return peers.first { $0.peerID == peerID }
40
+ let peerListIterator = hms.getPeerListIterator(options: HMSPeerListIteratorOptions(filterByPeerIds: [peerID], limit: 1))
41
+ peerListIterator.next() { peers, error in
42
+ guard let nonnilPeers = peers, let firstPeer = nonnilPeers.first else {
43
+ completion(nil)
44
+ return
45
+ }
46
+ completion(firstPeer)
47
+ }
34
48
  }
35
49
 
36
50
  static func getRolesFromRoleNames(_ targetedRoles: [String]?, roles: [HMSRole]?) -> [HMSRole] {
@@ -347,6 +361,21 @@ class HMSHelper: NSObject {
347
361
  return nil
348
362
  }
349
363
 
364
+ static func getPeerListIteratorOptions(_ data: NSDictionary?) -> HMSPeerListIteratorOptions? {
365
+ guard let config = data else {
366
+ return nil
367
+ }
368
+
369
+ let role = config["byRoleName"] as? String
370
+ let peerIds = config["peerIds"] as? [String]
371
+
372
+ if let limit = config["limit"] as? Int {
373
+ return HMSPeerListIteratorOptions(filterByRoleName: role, filterByPeerIds: peerIds, limit: limit)
374
+ }
375
+
376
+ return HMSPeerListIteratorOptions(filterByRoleName: role, filterByPeerIds: peerIds)
377
+ }
378
+
350
379
  private static func getAudioMode(from mode: String?) -> HMSAudioMode? {
351
380
  switch mode {
352
381
  case "voice":
package/ios/HMSManager.m CHANGED
@@ -96,6 +96,18 @@ RCT_EXTERN_METHOD(changeName
96
96
  : (NSDictionary)data
97
97
  : (RCTPromiseResolveBlock)resolve
98
98
  : (RCTPromiseRejectBlock)reject)
99
+ RCT_EXTERN_METHOD(raiseLocalPeerHand
100
+ : (NSDictionary)data
101
+ : (RCTPromiseResolveBlock)resolve
102
+ : (RCTPromiseRejectBlock)reject)
103
+ RCT_EXTERN_METHOD(lowerLocalPeerHand
104
+ : (NSDictionary)data
105
+ : (RCTPromiseResolveBlock)resolve
106
+ : (RCTPromiseRejectBlock)reject)
107
+ RCT_EXTERN_METHOD(lowerRemotePeerHand
108
+ : (NSDictionary)data
109
+ : (RCTPromiseResolveBlock)resolve
110
+ : (RCTPromiseRejectBlock)reject)
99
111
  RCT_EXTERN_METHOD(destroy
100
112
  : (NSDictionary)data
101
113
  : (RCTPromiseResolveBlock)resolve
@@ -240,4 +252,18 @@ RCT_EXTERN_METHOD(acceptRoleChange
240
252
  : (RCTPromiseResolveBlock)resolve
241
253
  : (RCTPromiseRejectBlock)reject)
242
254
 
255
+ #pragma mark - Peer List Iterator
256
+
257
+ RCT_EXTERN__BLOCKING_SYNCHRONOUS_METHOD(getPeerListIterator : (NSDictionary)data)
258
+
259
+ RCT_EXTERN_METHOD(peerListIteratorHasNext
260
+ : (NSDictionary)data
261
+ : (RCTPromiseResolveBlock)resolve
262
+ : (RCTPromiseRejectBlock)reject)
263
+
264
+ RCT_EXTERN_METHOD(peerListIteratorNext
265
+ : (NSDictionary)data
266
+ : (RCTPromiseResolveBlock)resolve
267
+ : (RCTPromiseRejectBlock)reject)
268
+
243
269
  @end
@@ -37,7 +37,7 @@ class HMSManager: RCTEventEmitter {
37
37
  }
38
38
 
39
39
  override func supportedEvents() -> [String]! {
40
- return [ON_JOIN, ON_PREVIEW, ON_ROOM_UPDATE, ON_PEER_UPDATE, ON_TRACK_UPDATE, ON_ERROR, ON_MESSAGE, ON_SPEAKER, RECONNECTING, RECONNECTED, ON_ROLE_CHANGE_REQUEST, ON_CHANGE_TRACK_STATE_REQUEST, ON_REMOVED_FROM_ROOM, ON_RTC_STATS, ON_LOCAL_AUDIO_STATS, ON_LOCAL_VIDEO_STATS, ON_REMOTE_AUDIO_STATS, ON_REMOTE_VIDEO_STATS, ON_AUDIO_DEVICE_CHANGED, HMSConstants.ON_SESSION_STORE_AVAILABLE, HMSConstants.ON_SESSION_STORE_CHANGED]
40
+ return [ON_JOIN, ON_PREVIEW, ON_ROOM_UPDATE, ON_PEER_UPDATE, ON_TRACK_UPDATE, ON_ERROR, ON_MESSAGE, ON_SPEAKER, RECONNECTING, RECONNECTED, ON_ROLE_CHANGE_REQUEST, ON_CHANGE_TRACK_STATE_REQUEST, ON_REMOVED_FROM_ROOM, ON_RTC_STATS, ON_LOCAL_AUDIO_STATS, ON_LOCAL_VIDEO_STATS, ON_REMOTE_AUDIO_STATS, ON_REMOTE_VIDEO_STATS, ON_AUDIO_DEVICE_CHANGED, HMSConstants.ON_SESSION_STORE_AVAILABLE, HMSConstants.ON_SESSION_STORE_CHANGED, HMSConstants.ON_PEER_LIST_UPDATED]
41
41
  }
42
42
 
43
43
  // MARK: - HMS SDK Delegate Callbacks
@@ -312,6 +312,27 @@ class HMSManager: RCTEventEmitter {
312
312
  hms?.changeName(data, resolve, reject)
313
313
  }
314
314
 
315
+ @objc
316
+ func raiseLocalPeerHand(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
317
+ let hms = HMSHelper.getHms(data, hmsCollection)
318
+
319
+ hms?.raiseLocalPeerHand(resolve, reject)
320
+ }
321
+
322
+ @objc
323
+ func lowerLocalPeerHand(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
324
+ let hms = HMSHelper.getHms(data, hmsCollection)
325
+
326
+ hms?.lowerLocalPeerHand(resolve, reject)
327
+ }
328
+
329
+ @objc
330
+ func lowerRemotePeerHand(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
331
+ let hms = HMSHelper.getHms(data, hmsCollection)
332
+
333
+ hms?.lowerRemotePeerHand(data, resolve, reject)
334
+ }
335
+
315
336
  // MARK: - RTMP Streaming & Recording
316
337
 
317
338
  @objc
@@ -599,4 +620,27 @@ class HMSManager: RCTEventEmitter {
599
620
 
600
621
  hms?.removeKeyChangeListener(data, resolve, reject)
601
622
  }
623
+
624
+ // MARK: - Peer List Iterator
625
+
626
+ @objc
627
+ func getPeerListIterator(_ data: NSDictionary) -> [AnyHashable: Any]? {
628
+ let hms = HMSHelper.getHms(data, hmsCollection)
629
+
630
+ return hms?.getPeerListIterator(data)
631
+ }
632
+
633
+ @objc
634
+ func peerListIteratorHasNext(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
635
+ let hms = HMSHelper.getHms(data, hmsCollection)
636
+
637
+ hms?.peerListIteratorHasNext(data, resolve, reject)
638
+ }
639
+
640
+ @objc
641
+ func peerListIteratorNext(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
642
+ let hms = HMSHelper.getHms(data, hmsCollection)
643
+
644
+ hms?.peerListIteratorNext(data, resolve, reject)
645
+ }
602
646
  }