@100mslive/react-native-hms 1.7.2 → 2.0.0-alpha.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 (119) hide show
  1. package/android/.gradle/6.7.1/executionHistory/executionHistory.lock +0 -0
  2. package/android/.gradle/6.7.1/fileHashes/fileHashes.lock +0 -0
  3. package/android/.gradle/6.9/executionHistory/executionHistory.bin +0 -0
  4. package/android/.gradle/6.9/executionHistory/executionHistory.lock +0 -0
  5. package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
  6. package/android/.gradle/6.9/fileHashes/fileHashes.lock +0 -0
  7. package/android/.gradle/{6.7.1/fileHashes/fileHashes.bin → 6.9/fileHashes/resourceHashesCache.bin} +0 -0
  8. package/android/.gradle/6.9/javaCompile/classAnalysis.bin +0 -0
  9. package/android/.gradle/6.9/javaCompile/jarAnalysis.bin +0 -0
  10. package/android/.gradle/6.9/javaCompile/javaCompile.lock +0 -0
  11. package/android/.gradle/6.9/javaCompile/taskHistory.bin +0 -0
  12. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  13. package/android/.gradle/buildOutputCleanup/cache.properties +1 -1
  14. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  15. package/android/.gradle/checksums/checksums.lock +0 -0
  16. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  17. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  18. package/android/.idea/compiler.xml +6 -0
  19. package/android/.idea/gradle.xml +18 -0
  20. package/android/.idea/jarRepositories.xml +45 -0
  21. package/android/.idea/misc.xml +10 -0
  22. package/android/.idea/vcs.xml +6 -0
  23. package/android/build.gradle +3 -3
  24. package/android/local.properties +8 -1
  25. package/android/src/main/java/com/reactnativehmssdk/HMSAudioshareActivity.kt +1 -0
  26. package/android/src/main/java/com/reactnativehmssdk/HMSDecoder.kt +42 -14
  27. package/android/src/main/java/com/reactnativehmssdk/HMSHLSPlayer.kt +113 -68
  28. package/android/src/main/java/com/reactnativehmssdk/HMSHLSPlayerManager.kt +17 -4
  29. package/android/src/main/java/com/reactnativehmssdk/HMSHelper.kt +46 -18
  30. package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +483 -184
  31. package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +551 -151
  32. package/android/src/main/java/com/reactnativehmssdk/HMSSDKViewManager.kt +26 -7
  33. package/android/src/main/java/com/reactnativehmssdk/HMSView.kt +32 -12
  34. package/android/src/main/java/com/reactnativehmssdk/HmsScreenshareActivity.kt +1 -0
  35. package/android/src/main/java/com/reactnativehmssdk/PipActionReceiver.kt +10 -6
  36. package/android/src/main/res/layout/player_view.xml +3 -2
  37. package/ios/HMSConstants.swift +1 -0
  38. package/ios/HMSDecoder.swift +18 -7
  39. package/ios/HMSHLSPlayerManager.swift +18 -2
  40. package/ios/HMSManager.m +239 -70
  41. package/ios/HMSManager.swift +24 -3
  42. package/ios/HMSRNSDK.swift +129 -126
  43. package/ios/HMSView.swift +17 -3
  44. package/ios/Hmssdk.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  45. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  46. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcuserdata/jatinnagar.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  47. package/ios/Hmssdk.xcodeproj/xcuserdata/jatinnagar.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  48. package/lib/commonjs/classes/HMSEncoder.js +6 -0
  49. package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
  50. package/lib/commonjs/classes/HMSPIPListenerActions.js +1 -0
  51. package/lib/commonjs/classes/HMSPIPListenerActions.js.map +1 -1
  52. package/lib/commonjs/classes/HMSPeer.js +15 -0
  53. package/lib/commonjs/classes/HMSPeer.js.map +1 -1
  54. package/lib/commonjs/classes/HMSPeerListIterator.js +46 -0
  55. package/lib/commonjs/classes/HMSPeerListIterator.js.map +1 -0
  56. package/lib/commonjs/classes/HMSPeerListIteratorOptions.js +2 -0
  57. package/lib/commonjs/classes/HMSPeerListIteratorOptions.js.map +1 -0
  58. package/lib/commonjs/classes/HMSPeerUpdate.js +2 -1
  59. package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
  60. package/lib/commonjs/classes/HMSPeersCache.js +7 -0
  61. package/lib/commonjs/classes/HMSPeersCache.js.map +1 -1
  62. package/lib/commonjs/classes/HMSSDK.js +162 -29
  63. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  64. package/lib/commonjs/classes/HMSUpdateListenerActions.js +1 -0
  65. package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
  66. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js +10 -5
  67. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -1
  68. package/lib/commonjs/index.js.map +1 -1
  69. package/lib/commonjs/types.js +1 -0
  70. package/lib/commonjs/types.js.map +1 -1
  71. package/lib/module/classes/HMSEncoder.js +6 -0
  72. package/lib/module/classes/HMSEncoder.js.map +1 -1
  73. package/lib/module/classes/HMSPIPListenerActions.js +1 -0
  74. package/lib/module/classes/HMSPIPListenerActions.js.map +1 -1
  75. package/lib/module/classes/HMSPeer.js +15 -0
  76. package/lib/module/classes/HMSPeer.js.map +1 -1
  77. package/lib/module/classes/HMSPeerListIterator.js +40 -0
  78. package/lib/module/classes/HMSPeerListIterator.js.map +1 -0
  79. package/lib/module/classes/HMSPeerListIteratorOptions.js +2 -0
  80. package/lib/module/classes/HMSPeerListIteratorOptions.js.map +1 -0
  81. package/lib/module/classes/HMSPeerUpdate.js +2 -1
  82. package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
  83. package/lib/module/classes/HMSPeersCache.js +7 -0
  84. package/lib/module/classes/HMSPeersCache.js.map +1 -1
  85. package/lib/module/classes/HMSSDK.js +162 -30
  86. package/lib/module/classes/HMSSDK.js.map +1 -1
  87. package/lib/module/classes/HMSUpdateListenerActions.js +1 -0
  88. package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
  89. package/lib/module/components/HMSHLSPlayer/HMSHLSPlayer.js +11 -6
  90. package/lib/module/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -1
  91. package/lib/module/index.js.map +1 -1
  92. package/lib/module/types.js +1 -0
  93. package/lib/module/types.js.map +1 -1
  94. package/lib/typescript/classes/HMSEncoder.d.ts +1 -0
  95. package/lib/typescript/classes/HMSPIPListenerActions.d.ts +1 -0
  96. package/lib/typescript/classes/HMSPeer.d.ts +3 -0
  97. package/lib/typescript/classes/HMSPeerListIterator.d.ts +7 -0
  98. package/lib/typescript/classes/HMSPeerListIteratorOptions.d.ts +5 -0
  99. package/lib/typescript/classes/HMSPeerUpdate.d.ts +2 -1
  100. package/lib/typescript/classes/HMSPeersCache.d.ts +1 -0
  101. package/lib/typescript/classes/HMSSDK.d.ts +46 -13
  102. package/lib/typescript/classes/HMSUpdateListenerActions.d.ts +2 -1
  103. package/lib/typescript/index.d.ts +1 -1
  104. package/lib/typescript/types.d.ts +3 -1
  105. package/package.json +1 -1
  106. package/sdk-versions.json +2 -2
  107. package/src/classes/HMSEncoder.ts +9 -0
  108. package/src/classes/HMSPIPListenerActions.ts +1 -0
  109. package/src/classes/HMSPeer.ts +25 -0
  110. package/src/classes/HMSPeerListIterator.ts +40 -0
  111. package/src/classes/HMSPeerListIteratorOptions.ts +5 -0
  112. package/src/classes/HMSPeerUpdate.ts +2 -0
  113. package/src/classes/HMSPeersCache.ts +7 -0
  114. package/src/classes/HMSSDK.tsx +202 -26
  115. package/src/classes/HMSUpdateListenerActions.ts +1 -0
  116. package/src/components/HMSHLSPlayer/HMSHLSPlayer.tsx +15 -13
  117. package/src/index.ts +4 -1
  118. package/src/types.ts +2 -0
  119. package/android/.gradle/6.7.1/executionHistory/executionHistory.bin +0 -0
@@ -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
@@ -99,10 +99,10 @@ class HMSManager: RCTEventEmitter {
99
99
  }
100
100
 
101
101
  @objc
102
- func cancelPreview(_ data: NSDictionary) {
102
+ func cancelPreview(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
103
103
  let hms = HMSHelper.getHms(data, hmsCollection)
104
104
 
105
- hms?.cancelPreview()
105
+ hms?.cancelPreview(resolve, reject)
106
106
  }
107
107
 
108
108
  // MARK: - Join Room
@@ -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
@@ -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?
@@ -129,25 +132,29 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
129
132
  let roleObj = HMSHelper.getRoleFromRoleName(role, roles: hms?.roles)
130
133
 
131
134
  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])
135
+ DispatchQueue.main.async { [weak self] in
136
+ self?.hms?.preview(role: extractedRole) { tracks, error in
137
+ if error != nil {
138
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
139
+ return
136
140
  }
137
- reject?(error?.localizedDescription, error?.localizedDescription, nil)
138
- return
139
- }
140
141
 
141
- let decodedTracks = HMSDecoder.getAllTracks(tracks ?? [])
142
+ self?.previewForRoleTracks = tracks
142
143
 
143
- resolve?(["success": true, "tracks": decodedTracks] as [String: Any])
144
- return
145
- })
144
+ let decodedTracks = HMSDecoder.getAllTracks(tracks ?? [])
145
+
146
+ resolve?(["success": true, "tracks": decodedTracks] as [String: Any])
147
+ }
148
+ }
146
149
  }
147
150
  }
148
151
 
149
- func cancelPreview() {
150
- hms?.cancelPreview()
152
+ func cancelPreview(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
153
+ DispatchQueue.main.async { [weak self] in
154
+ self?.hms?.cancelPreview()
155
+ self?.previewForRoleTracks = nil
156
+ resolve?(["success": true])
157
+ }
151
158
  }
152
159
 
153
160
  func join(_ credentials: NSDictionary) {
@@ -230,7 +237,15 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
230
237
  }
231
238
 
232
239
  DispatchQueue.main.async { [weak self] in
233
- self?.hms?.localPeer?.localAudioTrack()?.setMute(isMute)
240
+ if let audioTrack = self?.hms?.localPeer?.localAudioTrack() {
241
+ audioTrack.setMute(isMute)
242
+ } else if let tracks = self?.previewForRoleTracks {
243
+ if let audioTrack = tracks.first(where: { $0.kind == HMSTrackKind.audio }) as? HMSLocalAudioTrack {
244
+ audioTrack.setMute(isMute)
245
+ }
246
+ } else {
247
+ print(#function, "No local audio track available for setting mute state.")
248
+ }
234
249
  }
235
250
  }
236
251
 
@@ -243,42 +258,54 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
243
258
  }
244
259
 
245
260
  DispatchQueue.main.async { [weak self] in
246
- self?.hms?.localPeer?.localVideoTrack()?.setMute(isMute)
261
+ if let videoTrack = self?.hms?.localPeer?.localVideoTrack() {
262
+ videoTrack.setMute(isMute)
263
+ } else if let tracks = self?.previewForRoleTracks {
264
+ if let videoTrack = tracks.first(where: { $0.kind == HMSTrackKind.video }) as? HMSLocalVideoTrack {
265
+ videoTrack.setMute(isMute)
266
+ }
267
+ } else {
268
+ print(#function, "No local video track available for setting mute state.")
269
+ }
247
270
  }
248
271
  }
249
272
 
250
273
  func switchCamera() {
251
274
  DispatchQueue.main.async { [weak self] in
252
- self?.hms?.localPeer?.localVideoTrack()?.switchCamera()
275
+ if let localVideoTrack = self?.hms?.localPeer?.localVideoTrack() {
276
+ localVideoTrack.switchCamera()
277
+ } else if let tracks = self?.previewForRoleTracks {
278
+ if let videoTrack = tracks.first(where: { $0.kind == HMSTrackKind.video }) as? HMSLocalVideoTrack {
279
+ videoTrack.switchCamera()
280
+ }
281
+ } else {
282
+ print(#function, "No local video track available for switching camera.")
283
+ }
253
284
  }
254
285
  }
255
286
 
256
287
  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
288
+ DispatchQueue.main.async { [weak self] in
289
+ guard let strongSelf = self else {
290
+ print(#function, "Could not find reference to self while executing Room leave")
291
+ return
292
+ }
293
+
294
+ strongSelf.hms?.leave { [weak self] success, error in
295
+
261
296
  guard let strongSelf = self else {
262
- print(#function, "Could not find reference to self while executing Room leave")
297
+ print(#function, "Could not find reference to self when callback is received while executing Room leave")
263
298
  return
264
299
  }
265
300
 
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)
301
+ if success {
302
+ resolve?(["success": success])
303
+ strongSelf.cleanup() // resetting states and doing data cleanup
304
+ } else {
305
+ if strongSelf.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
306
+ strongSelf.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": strongSelf.id])
281
307
  }
308
+ reject?("error in leave", "error in leave", nil)
282
309
  }
283
310
  }
284
311
  }
@@ -301,9 +328,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
301
328
  resolve?(["messageId": message?.messageID ?? "", "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]] as [String: Any])
302
329
  return
303
330
  } 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
331
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
308
332
  return
309
333
  }
@@ -329,9 +353,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
329
353
  resolve?(["messageId": message?.messageID ?? "", "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]] as [String: Any])
330
354
  return
331
355
  } 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
356
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
336
357
  return
337
358
  }
@@ -357,9 +378,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
357
378
  resolve?(["messageId": message?.messageID ?? "", "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]] as [String: Any])
358
379
  return
359
380
  } 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
381
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
364
382
  return
365
383
  }
@@ -383,13 +401,11 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
383
401
  if success {
384
402
  resolve?(["success": success])
385
403
  } 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
404
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
390
405
  }
391
406
  })
392
407
  self?.recentRoleChangeRequest = nil
408
+ self?.previewForRoleTracks = nil
393
409
  }
394
410
  }
395
411
 
@@ -423,9 +439,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
423
439
  if success {
424
440
  resolve?(["success": success])
425
441
  } 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
442
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
430
443
  }
431
444
  })
@@ -461,9 +474,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
461
474
  if success {
462
475
  resolve?(["success": success])
463
476
  } 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
477
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
468
478
  }
469
479
  }
@@ -494,9 +504,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
494
504
  if success {
495
505
  resolve?(["success": success])
496
506
  } 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
507
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
501
508
  }
502
509
  })
@@ -531,9 +538,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
531
538
  if success {
532
539
  resolve?(["success": success])
533
540
  } 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
541
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
538
542
  }
539
543
  })
@@ -557,9 +561,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
557
561
  guard let remotePeers = self?.hms?.remotePeers,
558
562
  let track = HMSHelper.getTrackFromTrackId(trackId, remotePeers)
559
563
  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
564
  reject?("Track not found", "Track not found", nil)
564
565
  return
565
566
  }
@@ -597,9 +598,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
597
598
  if success {
598
599
  resolve?(["success": success])
599
600
  } else {
600
- if self?.eventsEnableStatus[HMSConstants.ON_ERROR] == true {
601
- self?.delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": HMSDecoder.getError(error), "id": self?.id ?? "12345"])
602
- }
603
601
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
604
602
  }
605
603
  })
@@ -623,9 +621,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
623
621
  resolve?(["success": success])
624
622
  self?.cleanup() // resetting states and doing data cleanup
625
623
  } 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
624
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
630
625
  }
631
626
  })
@@ -704,9 +699,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
704
699
  resolve?(["success": success])
705
700
  return
706
701
  } 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
702
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
711
703
  return
712
704
  }
@@ -730,8 +722,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
730
722
 
731
723
  if remoteAudioTrack != nil {
732
724
  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
725
  }
736
726
  }
737
727
  }
@@ -754,9 +744,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
754
744
  if let meetLink = URL(string: meetingString) {
755
745
  meetingUrl = meetLink
756
746
  } 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
747
  reject?("Invalid meeting url passed", "Invalid meeting url passed", nil)
761
748
  }
762
749
  }
@@ -769,9 +756,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
769
756
  resolve?(["success": success])
770
757
  return
771
758
  } 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
759
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
776
760
  return
777
761
  }
@@ -784,9 +768,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
784
768
  resolve?(["success": success])
785
769
  return
786
770
  } 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
771
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
791
772
  return
792
773
  }
@@ -806,9 +787,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
806
787
  resolve?(["success": success])
807
788
  return
808
789
  } 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
790
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
813
791
  return
814
792
  }
@@ -821,9 +799,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
821
799
  resolve?(["success": success])
822
800
  return
823
801
  } 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
802
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
828
803
  return
829
804
  }
@@ -843,9 +818,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
843
818
  if success {
844
819
  resolve?(["success": success])
845
820
  } 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
821
  reject?(error?.localizedDescription, error?.localizedDescription, nil)
850
822
  }
851
823
  }
@@ -887,9 +859,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
887
859
 
888
860
  func startScreenshare(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
889
861
  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
862
  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
863
  return
895
864
  }
@@ -911,9 +880,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
911
880
 
912
881
  func stopScreenshare(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
913
882
  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
883
  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
884
  return
919
885
  }
@@ -937,6 +903,48 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
937
903
  resolve?(isScreenShared)
938
904
  }
939
905
 
906
+ func raiseLocalPeerHand(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
907
+ self.hms?.raiseLocalPeerHand { success, error in
908
+ if error != nil {
909
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
910
+ return
911
+ }
912
+ resolve?(success)
913
+ }
914
+ }
915
+
916
+ func lowerLocalPeerHand(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
917
+ self.hms?.lowerLocalPeerHand { success, error in
918
+ if error != nil {
919
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
920
+ return
921
+ }
922
+ resolve?(success)
923
+ }
924
+ }
925
+
926
+ func lowerRemotePeerHand(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
927
+ guard let peerId = data.value(forKey: "peerId") as? String else {
928
+ let errorMessage = "lowerRemotePeerHand: " + HMSHelper.getUnavailableRequiredKey(data, ["peerId"])
929
+ reject?(errorMessage, errorMessage, nil)
930
+ return
931
+ }
932
+
933
+ guard let remotePeer = HMSHelper.getRemotePeerFromPeerId(peerId, remotePeers: self.hms?.remotePeers) else {
934
+ let errorMessage = "lowerRemotePeerHand: Could not find remote peer with peerID - " + peerId
935
+ reject?(errorMessage, errorMessage, nil)
936
+ return
937
+ }
938
+
939
+ self.hms?.lowerRemotePeerHand(remotePeer) { success, error in
940
+ if error != nil {
941
+ reject?(error?.localizedDescription, error?.localizedDescription, nil)
942
+ return
943
+ }
944
+ resolve?(success)
945
+ }
946
+ }
947
+
940
948
  func playAudioShare(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
941
949
  guard let fileUrl = data.value(forKey: "fileUrl") as? String,
942
950
  let audioNodeName = data.value(forKey: "audioNode") as? String,
@@ -956,21 +964,12 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
956
964
  try audioFilePlayerNode.play(fileUrl: url, loops: loops, interrupts: interrupts)
957
965
  resolve?(["success": true])
958
966
  } 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
967
  reject?(error.localizedDescription, error.localizedDescription, nil)
963
968
  }
964
969
  } 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
970
  reject?("Incorrect URL", "Incorrect URL", nil)
969
971
  }
970
972
  } 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
973
  reject?("AudioFilePlayerNode not found", "AudioFilePlayerNode not found", nil)
975
974
  }
976
975
  }
@@ -1004,8 +1003,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1004
1003
  }
1005
1004
  if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
1006
1005
  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
1006
  }
1010
1007
  }
1011
1008
 
@@ -1026,8 +1023,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1026
1023
  delegate?.emitEvent(HMSConstants.ON_ERROR, ["error": ["code": 6002, "description": error.localizedDescription, "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
1027
1024
  }
1028
1025
  }
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
1026
  }
1032
1027
  }
1033
1028
 
@@ -1042,8 +1037,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1042
1037
  }
1043
1038
  if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
1044
1039
  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
1040
  }
1048
1041
  }
1049
1042
 
@@ -1060,9 +1053,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1060
1053
  if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
1061
1054
  resolve?(audioFilePlayerNode.isPlaying)
1062
1055
  } 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
1056
  reject?("AudioFilePlayerNode not found", "AudioFilePlayerNode not found", nil)
1067
1057
  }
1068
1058
  }
@@ -1080,9 +1070,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1080
1070
  if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
1081
1071
  resolve?(audioFilePlayerNode.currentTime)
1082
1072
  } 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
1073
  reject?("AudioFilePlayerNode not found", "AudioFilePlayerNode not found", nil)
1087
1074
  }
1088
1075
  }
@@ -1100,9 +1087,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1100
1087
  if let audioFilePlayerNode = playerNode as? HMSAudioFilePlayerNode {
1101
1088
  resolve?(audioFilePlayerNode.duration)
1102
1089
  } 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
1090
  reject?("AudioFilePlayerNode not found", "AudioFilePlayerNode not found", nil)
1107
1091
  }
1108
1092
  }
@@ -1200,6 +1184,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1200
1184
  }
1201
1185
  case "metadata":
1202
1186
  return ["metadata": peer.metadata ?? ""]
1187
+ case "isHandRaised":
1188
+ return ["isHandRaised": peer.isHandRaised]
1203
1189
  case "role":
1204
1190
  return ["role": HMSDecoder.getHmsRole(peer.role)]
1205
1191
  case "customerUserID":
@@ -1361,6 +1347,24 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1361
1347
  self.delegate?.emitEvent(HMSConstants.ON_ROOM_UPDATE, ["event": HMSConstants.ON_ROOM_UPDATE, "id": self.id, "type": type, "room": roomData])
1362
1348
  }
1363
1349
 
1350
+ func onPeerListUpdate(added: [HMSPeer], removed: [HMSPeer]) {
1351
+ if eventsEnableStatus["ON_PEER_LIST_UPDATED"] != true {
1352
+ return
1353
+ }
1354
+ var addedPeers = [[String: Any]]()
1355
+ var removedPeers = [[String: Any]]()
1356
+
1357
+ for peer in added {
1358
+ addedPeers.append(HMSDecoder.getHmsPeerSubset(peer))
1359
+ }
1360
+
1361
+ for peer in removed {
1362
+ removedPeers.append(HMSDecoder.getHmsPeerSubset(peer))
1363
+ }
1364
+
1365
+ self.delegate?.emitEvent(HMSConstants.ON_PEER_LIST_UPDATED, ["event": HMSConstants.ON_PEER_LIST_UPDATED, "id": self.id, "addedPeers": addedPeers, "removedPeers": removedPeers])
1366
+ }
1367
+
1364
1368
  func on(peer: HMSPeer, update: HMSPeerUpdate) {
1365
1369
 
1366
1370
  guard let isPeerUpdateEnabled = eventsEnableStatus[HMSConstants.ON_PEER_UPDATE],
@@ -1891,6 +1895,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1891
1895
  // Handle resetting states and data cleanup
1892
1896
  private func cleanup() {
1893
1897
  self.recentRoleChangeRequest = nil
1898
+ self.previewForRoleTracks = nil
1894
1899
  self.reconnectingStage = false
1895
1900
  self.preferredExtension = nil
1896
1901
  self.systemBroadcastPicker = nil
@@ -1949,9 +1954,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1949
1954
 
1950
1955
  func getString(from update: HMSRoomUpdate) -> String {
1951
1956
  switch update {
1952
- case .roomTypeChanged:
1953
- return "ROOM_PEER_COUNT_UPDATED"
1954
- case .metaDataUpdated:
1957
+ case .roomTypeChanged, .metaDataUpdated, .peerCountUpdated:
1955
1958
  return "ROOM_PEER_COUNT_UPDATED"
1956
1959
  case .browserRecordingStateUpdated:
1957
1960
  return "BROWSER_RECORDING_STATE_UPDATED"
package/ios/HMSView.swift CHANGED
@@ -91,14 +91,28 @@ class HmssdkDisplayView: UIView {
91
91
  return
92
92
  }
93
93
 
94
- guard let videoTrack = HMSUtilities.getVideoTrack(for: trackID, in: room)
95
- else {
94
+ if let videoTrack = HMSUtilities.getVideoTrack(for: trackID, in: room) {
95
+ videoView.setVideoTrack(videoTrack)
96
+ } else if let videoTrack = getPreviewForRoleTrack(trackID) {
97
+ videoView.setVideoTrack(videoTrack)
98
+ } else {
96
99
  print(#function, "Could not find video track in room with trackID: \(trackID)")
97
100
  return
98
101
  }
102
+ }
103
+ }
99
104
 
100
- videoView.setVideoTrack(videoTrack)
105
+ private func getPreviewForRoleTrack(_ trackID: String) -> HMSVideoTrack? {
106
+
107
+ if let hmsRnSdk = hmsCollection["12345"] {
108
+ if let tracks = hmsRnSdk.previewForRoleTracks {
109
+ if let videoTrack = tracks.first(where: { $0.trackId == trackID }) as? HMSVideoTrack {
110
+ return videoTrack
111
+ }
112
+ }
101
113
  }
114
+
115
+ return nil
102
116
  }
103
117
 
104
118
  @objc func captureHmsView( _ requestId: NSNumber) {
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <Workspace
3
+ version = "1.0">
4
+ <FileRef
5
+ location = "self:">
6
+ </FileRef>
7
+ </Workspace>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>IDEDidComputeMac32BitWarning</key>
6
+ <true/>
7
+ </dict>
8
+ </plist>
@@ -0,0 +1,14 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>SchemeUserState</key>
6
+ <dict>
7
+ <key>Hmssdk.xcscheme_^#shared#^_</key>
8
+ <dict>
9
+ <key>orderHint</key>
10
+ <integer>0</integer>
11
+ </dict>
12
+ </dict>
13
+ </dict>
14
+ </plist>