@100mslive/react-native-hms 0.9.0 → 0.9.3

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 (206) hide show
  1. package/README.md +242 -21
  2. package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
  3. package/android/.gradle/6.9/fileHashes/fileHashes.lock +0 -0
  4. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  5. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  6. package/android/.gradle/checksums/checksums.lock +0 -0
  7. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  8. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  9. package/android/.idea/gradle.xml +13 -0
  10. package/android/.idea/misc.xml +9 -0
  11. package/android/.idea/modules/android.iml +18 -0
  12. package/android/.idea/modules.xml +8 -0
  13. package/android/.idea/sonarlint/issuestore/f/0/f07866736216be0ee2aba49e392191aeae700a35 +0 -0
  14. package/android/.idea/sonarlint/issuestore/index.pb +3 -0
  15. package/android/.idea/vcs.xml +6 -0
  16. package/android/build.gradle +2 -2
  17. package/android/local.properties +8 -0
  18. package/android/src/main/java/com/reactnativehmssdk/HmsDecoder.kt +53 -4
  19. package/android/src/main/java/com/reactnativehmssdk/HmsHelper.kt +138 -64
  20. package/android/src/main/java/com/reactnativehmssdk/HmsModule.kt +19 -5
  21. package/android/src/main/java/com/reactnativehmssdk/HmsSDK.kt +133 -109
  22. package/android/src/main/java/com/reactnativehmssdk/HmsScreenshareActivity.kt +11 -0
  23. package/android/src/main/java/com/reactnativehmssdk/HmsView.kt +3 -27
  24. package/android/src/main/java/com/reactnativehmssdk/HmssdkViewManager.kt +0 -2
  25. package/ios/HmsDecoder.swift +218 -137
  26. package/ios/HmsHelper.swift +51 -40
  27. package/ios/HmsManager.m +7 -1
  28. package/ios/HmsManager.swift +111 -68
  29. package/ios/HmsSDK.swift +345 -203
  30. package/ios/HmsView.swift +45 -31
  31. package/ios/VideoCollectionViewCell.swift +4 -4
  32. package/lib/commonjs/classes/HMSBrowserRecordingState.js +6 -0
  33. package/lib/commonjs/classes/HMSBrowserRecordingState.js.map +1 -1
  34. package/lib/commonjs/classes/HMSConfig.js +3 -0
  35. package/lib/commonjs/classes/HMSConfig.js.map +1 -1
  36. package/lib/commonjs/classes/HMSEncoder.js +196 -5
  37. package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
  38. package/lib/commonjs/classes/HMSHLSConfig.js +3 -0
  39. package/lib/commonjs/classes/HMSHLSConfig.js.map +1 -1
  40. package/lib/commonjs/classes/HMSHLSRecordingConfig.js +23 -0
  41. package/lib/commonjs/classes/HMSHLSRecordingConfig.js.map +1 -0
  42. package/lib/commonjs/classes/HMSHLSRecordingState.js +29 -0
  43. package/lib/commonjs/classes/HMSHLSRecordingState.js.map +1 -0
  44. package/lib/commonjs/classes/HMSHLSVariant.js.map +1 -1
  45. package/lib/commonjs/classes/HMSLocalAudioStats.js +26 -0
  46. package/lib/commonjs/classes/HMSLocalAudioStats.js.map +1 -0
  47. package/lib/commonjs/classes/HMSLocalPeer.js.map +1 -1
  48. package/lib/commonjs/classes/HMSLocalVideoStats.js +32 -0
  49. package/lib/commonjs/classes/HMSLocalVideoStats.js.map +1 -0
  50. package/lib/commonjs/classes/HMSLogger.js +21 -21
  51. package/lib/commonjs/classes/HMSLogger.js.map +1 -1
  52. package/lib/commonjs/classes/HMSMessage.js +4 -1
  53. package/lib/commonjs/classes/HMSMessage.js.map +1 -1
  54. package/lib/commonjs/classes/HMSMessageRecipient.js +26 -0
  55. package/lib/commonjs/classes/HMSMessageRecipient.js.map +1 -0
  56. package/lib/commonjs/classes/HMSMessageRecipientType.js +15 -0
  57. package/lib/commonjs/classes/HMSMessageRecipientType.js.map +1 -0
  58. package/lib/commonjs/classes/HMSNetworkQuality.js +20 -0
  59. package/lib/commonjs/classes/HMSNetworkQuality.js.map +1 -0
  60. package/lib/commonjs/classes/HMSPeer.js +3 -0
  61. package/lib/commonjs/classes/HMSPeer.js.map +1 -1
  62. package/lib/commonjs/classes/HMSPeerUpdate.js +2 -7
  63. package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
  64. package/lib/commonjs/classes/HMSPermissions.js +2 -2
  65. package/lib/commonjs/classes/HMSPermissions.js.map +1 -1
  66. package/lib/commonjs/classes/HMSRTCStats.js +38 -0
  67. package/lib/commonjs/classes/HMSRTCStats.js.map +1 -0
  68. package/lib/commonjs/classes/HMSRTCStatsReport.js +26 -0
  69. package/lib/commonjs/classes/HMSRTCStatsReport.js.map +1 -0
  70. package/lib/commonjs/classes/HMSRemoteAudioStats.js +32 -0
  71. package/lib/commonjs/classes/HMSRemoteAudioStats.js.map +1 -0
  72. package/lib/commonjs/classes/HMSRemotePeer.js.map +1 -1
  73. package/lib/commonjs/classes/HMSRemoteVideoStats.js +38 -0
  74. package/lib/commonjs/classes/HMSRemoteVideoStats.js.map +1 -0
  75. package/lib/commonjs/classes/HMSRoom.js +6 -0
  76. package/lib/commonjs/classes/HMSRoom.js.map +1 -1
  77. package/lib/commonjs/classes/HMSRoomUpdate.js +1 -0
  78. package/lib/commonjs/classes/HMSRoomUpdate.js.map +1 -1
  79. package/lib/commonjs/classes/HMSRtmpStreamingState.js +6 -0
  80. package/lib/commonjs/classes/HMSRtmpStreamingState.js.map +1 -1
  81. package/lib/commonjs/classes/HMSSDK.js +381 -114
  82. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  83. package/lib/commonjs/classes/HMSServerRecordingState.js +3 -0
  84. package/lib/commonjs/classes/HMSServerRecordingState.js.map +1 -1
  85. package/lib/commonjs/classes/HMSUpdateListenerActions.js +5 -0
  86. package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
  87. package/lib/commonjs/index.js +154 -0
  88. package/lib/commonjs/index.js.map +1 -1
  89. package/lib/module/classes/HMSBrowserRecordingState.js +6 -0
  90. package/lib/module/classes/HMSBrowserRecordingState.js.map +1 -1
  91. package/lib/module/classes/HMSConfig.js +3 -0
  92. package/lib/module/classes/HMSConfig.js.map +1 -1
  93. package/lib/module/classes/HMSEncoder.js +187 -5
  94. package/lib/module/classes/HMSEncoder.js.map +1 -1
  95. package/lib/module/classes/HMSHLSConfig.js +3 -0
  96. package/lib/module/classes/HMSHLSConfig.js.map +1 -1
  97. package/lib/module/classes/HMSHLSRecordingConfig.js +14 -0
  98. package/lib/module/classes/HMSHLSRecordingConfig.js.map +1 -0
  99. package/lib/module/classes/HMSHLSRecordingState.js +20 -0
  100. package/lib/module/classes/HMSHLSRecordingState.js.map +1 -0
  101. package/lib/module/classes/HMSHLSVariant.js.map +1 -1
  102. package/lib/module/classes/HMSLocalAudioStats.js +17 -0
  103. package/lib/module/classes/HMSLocalAudioStats.js.map +1 -0
  104. package/lib/module/classes/HMSLocalPeer.js.map +1 -1
  105. package/lib/module/classes/HMSLocalVideoStats.js +23 -0
  106. package/lib/module/classes/HMSLocalVideoStats.js.map +1 -0
  107. package/lib/module/classes/HMSLogger.js +21 -21
  108. package/lib/module/classes/HMSLogger.js.map +1 -1
  109. package/lib/module/classes/HMSMessage.js +4 -1
  110. package/lib/module/classes/HMSMessage.js.map +1 -1
  111. package/lib/module/classes/HMSMessageRecipient.js +17 -0
  112. package/lib/module/classes/HMSMessageRecipient.js.map +1 -0
  113. package/lib/module/classes/HMSMessageRecipientType.js +8 -0
  114. package/lib/module/classes/HMSMessageRecipientType.js.map +1 -0
  115. package/lib/module/classes/HMSNetworkQuality.js +11 -0
  116. package/lib/module/classes/HMSNetworkQuality.js.map +1 -0
  117. package/lib/module/classes/HMSPeer.js +3 -0
  118. package/lib/module/classes/HMSPeer.js.map +1 -1
  119. package/lib/module/classes/HMSPeerUpdate.js +2 -7
  120. package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
  121. package/lib/module/classes/HMSPermissions.js +2 -2
  122. package/lib/module/classes/HMSPermissions.js.map +1 -1
  123. package/lib/module/classes/HMSRTCStats.js +29 -0
  124. package/lib/module/classes/HMSRTCStats.js.map +1 -0
  125. package/lib/module/classes/HMSRTCStatsReport.js +17 -0
  126. package/lib/module/classes/HMSRTCStatsReport.js.map +1 -0
  127. package/lib/module/classes/HMSRemoteAudioStats.js +23 -0
  128. package/lib/module/classes/HMSRemoteAudioStats.js.map +1 -0
  129. package/lib/module/classes/HMSRemotePeer.js.map +1 -1
  130. package/lib/module/classes/HMSRemoteVideoStats.js +29 -0
  131. package/lib/module/classes/HMSRemoteVideoStats.js.map +1 -0
  132. package/lib/module/classes/HMSRoom.js +6 -0
  133. package/lib/module/classes/HMSRoom.js.map +1 -1
  134. package/lib/module/classes/HMSRoomUpdate.js +1 -0
  135. package/lib/module/classes/HMSRoomUpdate.js.map +1 -1
  136. package/lib/module/classes/HMSRtmpStreamingState.js +6 -0
  137. package/lib/module/classes/HMSRtmpStreamingState.js.map +1 -1
  138. package/lib/module/classes/HMSSDK.js +368 -114
  139. package/lib/module/classes/HMSSDK.js.map +1 -1
  140. package/lib/module/classes/HMSServerRecordingState.js +3 -0
  141. package/lib/module/classes/HMSServerRecordingState.js.map +1 -1
  142. package/lib/module/classes/HMSUpdateListenerActions.js +5 -0
  143. package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
  144. package/lib/module/index.js +11 -0
  145. package/lib/module/index.js.map +1 -1
  146. package/lib/typescript/classes/HMSBrowserRecordingState.d.ts +4 -0
  147. package/lib/typescript/classes/HMSConfig.d.ts +2 -0
  148. package/lib/typescript/classes/HMSEncoder.d.ts +25 -0
  149. package/lib/typescript/classes/HMSHLSConfig.d.ts +5 -2
  150. package/lib/typescript/classes/HMSHLSRecordingConfig.d.ts +8 -0
  151. package/lib/typescript/classes/HMSHLSRecordingState.d.ts +12 -0
  152. package/lib/typescript/classes/HMSHLSVariant.d.ts +8 -8
  153. package/lib/typescript/classes/HMSLocalAudioStats.d.ts +10 -0
  154. package/lib/typescript/classes/HMSLocalPeer.d.ts +2 -0
  155. package/lib/typescript/classes/HMSLocalVideoStats.d.ts +15 -0
  156. package/lib/typescript/classes/HMSMessage.d.ts +8 -4
  157. package/lib/typescript/classes/HMSMessageRecipient.d.ts +13 -0
  158. package/lib/typescript/classes/HMSMessageRecipientType.d.ts +5 -0
  159. package/lib/typescript/classes/HMSNetworkQuality.d.ts +6 -0
  160. package/lib/typescript/classes/HMSPeer.d.ts +3 -0
  161. package/lib/typescript/classes/HMSPeerUpdate.d.ts +3 -8
  162. package/lib/typescript/classes/HMSPermissions.d.ts +2 -2
  163. package/lib/typescript/classes/HMSRTCStats.d.ts +18 -0
  164. package/lib/typescript/classes/HMSRTCStatsReport.d.ts +11 -0
  165. package/lib/typescript/classes/HMSRemoteAudioStats.d.ts +14 -0
  166. package/lib/typescript/classes/HMSRemotePeer.d.ts +2 -0
  167. package/lib/typescript/classes/HMSRemoteVideoStats.d.ts +19 -0
  168. package/lib/typescript/classes/HMSRoom.d.ts +5 -0
  169. package/lib/typescript/classes/HMSRoomUpdate.d.ts +2 -1
  170. package/lib/typescript/classes/HMSRtmpStreamingState.d.ts +4 -0
  171. package/lib/typescript/classes/HMSSDK.d.ts +310 -8
  172. package/lib/typescript/classes/HMSServerRecordingState.d.ts +2 -0
  173. package/lib/typescript/classes/HMSUpdateListenerActions.d.ts +6 -1
  174. package/lib/typescript/index.d.ts +11 -0
  175. package/package.json +1 -1
  176. package/react-native-hms.podspec +1 -1
  177. package/src/classes/HMSBrowserRecordingState.ts +10 -1
  178. package/src/classes/HMSConfig.ts +3 -0
  179. package/src/classes/HMSEncoder.ts +208 -5
  180. package/src/classes/HMSHLSConfig.ts +8 -2
  181. package/src/classes/HMSHLSRecordingConfig.ts +9 -0
  182. package/src/classes/HMSHLSRecordingState.ts +18 -0
  183. package/src/classes/HMSHLSVariant.ts +8 -8
  184. package/src/classes/HMSLocalAudioStats.ts +15 -0
  185. package/src/classes/HMSLocalPeer.ts +2 -0
  186. package/src/classes/HMSLocalVideoStats.ts +23 -0
  187. package/src/classes/HMSLogger.ts +3 -3
  188. package/src/classes/HMSMessage.ts +11 -5
  189. package/src/classes/HMSMessageRecipient.ts +19 -0
  190. package/src/classes/HMSMessageRecipientType.ts +5 -0
  191. package/src/classes/HMSNetworkQuality.ts +7 -0
  192. package/src/classes/HMSPeer.ts +4 -2
  193. package/src/classes/HMSPeerUpdate.ts +2 -7
  194. package/src/classes/HMSPermissions.ts +3 -3
  195. package/src/classes/HMSRTCStats.ts +27 -0
  196. package/src/classes/HMSRTCStatsReport.ts +17 -0
  197. package/src/classes/HMSRemoteAudioStats.ts +21 -0
  198. package/src/classes/HMSRemotePeer.ts +2 -0
  199. package/src/classes/HMSRemoteVideoStats.ts +29 -0
  200. package/src/classes/HMSRoom.ts +7 -0
  201. package/src/classes/HMSRoomUpdate.ts +1 -0
  202. package/src/classes/HMSRtmpStreamingState.ts +10 -1
  203. package/src/classes/HMSSDK.tsx +530 -18
  204. package/src/classes/HMSServerRecordingState.ts +7 -1
  205. package/src/classes/HMSUpdateListenerActions.ts +5 -0
  206. package/src/index.ts +11 -0
package/ios/HmsSDK.swift CHANGED
@@ -8,15 +8,16 @@
8
8
  import Foundation
9
9
  import HMSSDK
10
10
 
11
-
12
11
  class HmsSDK: HMSUpdateListener, HMSPreviewListener {
13
-
12
+
14
13
  var hms: HMSSDK?
15
14
  var config: HMSConfig?
16
15
  var recentRoleChangeRequest: HMSRoleChangeRequest?
17
16
  var delegate: HmsManager?
18
17
  var id: String = "12345"
19
-
18
+ var rtcStatsAttached = false
19
+ var recentPreviewTracks: [HMSTrack]? = []
20
+
20
21
  let ON_PREVIEW = "ON_PREVIEW"
21
22
  let ON_JOIN = "ON_JOIN"
22
23
  let ON_ROOM_UPDATE = "ON_ROOM_UPDATE"
@@ -29,9 +30,14 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
29
30
  let ON_SPEAKER = "ON_SPEAKER"
30
31
  let RECONNECTING = "RECONNECTING"
31
32
  let RECONNECTED = "RECONNECTED"
32
-
33
+ let ON_RTC_STATS = "ON_RTC_STATS"
34
+ let ON_LOCAL_AUDIO_STATS = "ON_LOCAL_AUDIO_STATS"
35
+ let ON_LOCAL_VIDEO_STATS = "ON_LOCAL_VIDEO_STATS"
36
+ let ON_REMOTE_AUDIO_STATS = "ON_REMOTE_AUDIO_STATS"
37
+ let ON_REMOTE_VIDEO_STATS = "ON_REMOTE_VIDEO_STATS"
38
+
33
39
  // MARK: - Setup
34
-
40
+
35
41
  init(data: NSDictionary?, delegate manager: HmsManager?, uid id: String) {
36
42
  let videoSettings = HmsHelper.getLocalVideoSettings(data?.value(forKey: "video") as? NSDictionary)
37
43
  let audioSettings = HmsHelper.getLocalAudioSettings(data?.value(forKey: "audio") as? NSDictionary)
@@ -44,137 +50,172 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
44
50
  self.delegate = manager
45
51
  self.id = id
46
52
  }
47
-
53
+
48
54
  // MARK: - HMS SDK Actions
49
-
55
+
50
56
  private var previewInProgress = false
51
57
 
52
58
  func preview(_ credentials: NSDictionary) {
53
-
59
+
54
60
  guard !previewInProgress else {
55
61
  let error = HMSError(id: "PREVIEW", code: .joinErrorServer, message: "PREVIEW_IS_IN_PROGRESS", params: ["function": #function, "credentials": credentials])
56
62
  on(error: error)
57
63
  return
58
64
  }
59
-
65
+
60
66
  guard let authToken = credentials.value(forKey: "authToken") as? String,
61
67
  let user = credentials.value(forKey: "username") as? String
62
68
  else {
63
69
  let error = HMSError(id: "101", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
64
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
70
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
65
71
  return
66
72
  }
67
-
73
+
68
74
  let metadata = credentials.value(forKey: "metadata") as? String
75
+ let captureNetworkQualityInPreview = credentials.value(forKey: "captureNetworkQualityInPreview") as? Bool ?? false
76
+
69
77
  DispatchQueue.main.async { [weak self] in
70
78
  guard let strongSelf = self else { return }
71
79
  if let endpoint = credentials.value(forKey: "endpoint") as? String {
72
- strongSelf.config = HMSConfig(userName: user, authToken: authToken, metadata: metadata, endpoint: endpoint)
80
+ strongSelf.config = HMSConfig(userName: user, authToken: authToken, metadata: metadata, endpoint: endpoint, captureNetworkQualityInPreview: captureNetworkQualityInPreview)
73
81
  strongSelf.hms?.preview(config: strongSelf.config!, delegate: strongSelf)
74
82
  } else {
75
- strongSelf.config = HMSConfig(userName: user, authToken: authToken, metadata: metadata)
83
+ strongSelf.config = HMSConfig(userName: user, authToken: authToken, metadata: metadata, captureNetworkQualityInPreview: captureNetworkQualityInPreview)
76
84
  strongSelf.hms?.preview(config: strongSelf.config!, delegate: strongSelf)
77
85
  }
78
86
  strongSelf.previewInProgress = true
79
87
  }
80
88
  }
81
89
 
90
+ func previewForRole(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
91
+ guard let role = data.value(forKey: "role") as? String
92
+ else {
93
+ let error = HMSError(id: "111", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
94
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
95
+ reject?(error.message, "FAILED_TO_INITIATE_PREVIEW_FOR_ROLE",nil)
96
+ return
97
+ }
98
+
99
+ let roleObj = HmsHelper.getRoleFromRoleName(role, roles: hms?.roles)
100
+
101
+ if let extractedRole = roleObj {
102
+ hms?.preview(role: extractedRole, completion: { tracks, error in
103
+ if (error != nil) {
104
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
105
+ reject?(error?.message, error?.localizedDescription, nil)
106
+ return
107
+ }
108
+ self.recentPreviewTracks = tracks
109
+
110
+ let decodedTracks = HmsDecoder.getAllTracks(tracks ?? [])
111
+
112
+ resolve?(["success": true, "tracks": decodedTracks])
113
+ return
114
+ })
115
+ }
116
+ }
82
117
 
118
+ func cancelPreview() {
119
+ self.recentPreviewTracks = []
120
+ hms?.cancelPreview()
121
+ }
122
+
83
123
  func join(_ credentials: NSDictionary) {
84
-
124
+
85
125
  guard !previewInProgress else {
86
126
  let error = HMSError(id: "PREVIEW", code: .joinErrorServer, message: "PREVIEW_IS_IN_PROGRESS", params: ["function": #function, "credentials": credentials])
87
127
  on(error: error)
88
128
  return
89
129
  }
90
-
130
+
91
131
  guard let authToken = credentials.value(forKey: "authToken") as? String,
92
132
  let user = credentials.value(forKey: "username") as? String
93
133
  else {
94
134
  let error = HMSError(id: "102", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
95
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
135
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
96
136
  return
97
137
  }
98
138
 
99
139
  let metadata = credentials.value(forKey: "metadata") as? String
100
-
140
+ let captureNetworkQualityInPreview = credentials.value(forKey: "captureNetworkQualityInPreview") as? Bool ?? false
141
+
101
142
  DispatchQueue.main.async { [weak self] in
102
143
  guard let strongSelf = self else { return }
103
144
  if let config = strongSelf.config {
104
145
  strongSelf.hms?.join(config: config, delegate: strongSelf)
105
146
  } else {
106
147
  if let endpoint = credentials.value(forKey: "endpoint") as? String {
107
- strongSelf.config = HMSConfig(userName: user, authToken: authToken, metadata: metadata, endpoint: endpoint)
148
+ strongSelf.config = HMSConfig(userName: user, authToken: authToken, metadata: metadata, endpoint: endpoint, captureNetworkQualityInPreview: captureNetworkQualityInPreview)
108
149
  strongSelf.hms?.join(config: strongSelf.config!, delegate: strongSelf)
109
150
  } else {
110
- strongSelf.config = HMSConfig(userName: user, authToken: authToken, metadata: metadata)
151
+ strongSelf.config = HMSConfig(userName: user, authToken: authToken, metadata: metadata, captureNetworkQualityInPreview: captureNetworkQualityInPreview)
111
152
  strongSelf.hms?.join(config: strongSelf.config!, delegate: strongSelf)
112
153
  }
113
154
  }
114
155
  }
115
156
  }
116
-
157
+
117
158
  func setLocalMute(_ data: NSDictionary) {
118
159
  guard let isMute = data.value(forKey: "isMute") as? Bool
119
160
  else {
120
161
  let error = HMSError(id: "106", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
121
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
162
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
122
163
  return
123
164
  }
124
-
165
+
125
166
  DispatchQueue.main.async { [weak self] in
126
167
  self?.hms?.localPeer?.localAudioTrack()?.setMute(isMute)
127
168
  }
128
169
  }
129
-
170
+
130
171
  func setLocalVideoMute(_ data: NSDictionary) {
131
172
  guard let isMute = data.value(forKey: "isMute") as? Bool
132
173
  else {
133
174
  let error = HMSError(id: "107", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
134
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
175
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
135
176
  return
136
177
  }
137
-
178
+
138
179
  DispatchQueue.main.async { [weak self] in
139
180
  self?.hms?.localPeer?.localVideoTrack()?.setMute(isMute)
140
181
  }
141
182
  }
142
-
183
+
143
184
  func switchCamera() {
144
185
  DispatchQueue.main.async { [weak self] in
145
186
  self?.hms?.localPeer?.localVideoTrack()?.switchCamera()
146
187
  }
147
188
  }
148
-
189
+
149
190
  func leave(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
150
191
  DispatchQueue.main.async { [weak self] in
151
192
  guard let strongSelf = self else { return }
152
193
  self?.config = nil
153
194
  self?.recentRoleChangeRequest = nil
154
195
  self?.hms?.leave({ success, error in
155
- if(success){
196
+ if success {
156
197
  resolve?("")
157
- }else{
158
- strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id":strongSelf.id])
159
- reject?(nil, "error in leave",nil)
198
+ } else {
199
+ strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id": strongSelf.id])
200
+ reject?(nil, "error in leave", nil)
160
201
  }
161
202
  })
162
203
  }
163
204
  }
164
-
205
+
165
206
  func sendBroadcastMessage(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
166
207
  guard let message = data.value(forKey: "message") as? String
167
208
  else {
168
209
  let error = HMSError(id: "108", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
169
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
210
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
170
211
  return
171
212
  }
172
-
213
+
173
214
  let type = data.value(forKey: "type") as? String ?? "chat"
174
-
215
+
175
216
  DispatchQueue.main.async { [weak self] in
176
217
  self?.hms?.sendBroadcastMessage(type: type, message: message, completion: { message, error in
177
- if (error == nil) {
218
+ if error == nil {
178
219
  resolve?(["success": true, "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]])
179
220
  return
180
221
  } else {
@@ -185,21 +226,21 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
185
226
  })
186
227
  }
187
228
  }
188
-
229
+
189
230
  func sendGroupMessage(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
190
231
  guard let message = data.value(forKey: "message") as? String,
191
232
  let targetedRoles = data.value(forKey: "roles") as? [String]
192
233
  else {
193
234
  let error = HMSError(id: "109", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
194
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
235
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
195
236
  return
196
237
  }
197
-
238
+
198
239
  let type = data.value(forKey: "type") as? String ?? "chat"
199
240
  DispatchQueue.main.async { [weak self] in
200
241
  let encodedTargetedRoles = HmsHelper.getRolesFromRoleNames(targetedRoles, roles: self?.hms?.roles)
201
242
  self?.hms?.sendGroupMessage(type: type, message: message, roles: encodedTargetedRoles, completion: { message, error in
202
- if (error == nil) {
243
+ if error == nil {
203
244
  resolve?(["success": true, "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]])
204
245
  return
205
246
  } else {
@@ -210,21 +251,21 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
210
251
  })
211
252
  }
212
253
  }
213
-
254
+
214
255
  func sendDirectMessage(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
215
256
  guard let message = data.value(forKey: "message") as? String,
216
257
  let peerId = data.value(forKey: "peerId") as? String
217
258
  else {
218
259
  let error = HMSError(id: "110", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
219
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
260
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
220
261
  return
221
262
  }
222
-
263
+
223
264
  let type = data.value(forKey: "type") as? String ?? "chat"
224
265
  DispatchQueue.main.async { [weak self] in
225
266
  guard let peer = HmsHelper.getRemotePeerFromPeerId(peerId, remotePeers: self?.hms?.remotePeers) else { return }
226
267
  self?.hms?.sendDirectMessage(type: type, message: message, peer: peer, completion: { message, error in
227
- if (error == nil) {
268
+ if error == nil {
228
269
  resolve?(["success": true, "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]])
229
270
  return
230
271
  } else {
@@ -235,124 +276,124 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
235
276
  })
236
277
  }
237
278
  }
238
-
279
+
239
280
  func acceptRoleChange(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
240
-
281
+
241
282
  DispatchQueue.main.async { [weak self] in
242
-
283
+
243
284
  guard let request = self?.recentRoleChangeRequest else { return }
244
-
285
+
245
286
  self?.hms?.accept(changeRole: request, completion: { success, error in
246
- if(success) {
287
+ if success {
247
288
  resolve?(["success": true])
248
- } else{
249
- self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id":self?.id ?? "12345"])
250
- reject?(error?.message, error?.localizedDescription,nil)
289
+ } else {
290
+ self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id": self?.id ?? "12345"])
291
+ reject?(error?.message, error?.localizedDescription, nil)
251
292
  }
252
293
  })
253
-
294
+ self?.recentPreviewTracks = []
254
295
  self?.recentRoleChangeRequest = nil
255
296
  }
256
297
  }
257
-
298
+
258
299
  func changeRole(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
259
-
300
+
260
301
  guard let peerId = data.value(forKey: "peerId") as? String,
261
302
  let role = data.value(forKey: "role") as? String
262
303
  else {
263
304
  let error = HMSError(id: "111", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
264
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
305
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
265
306
  return
266
307
  }
267
-
308
+
268
309
  let force = data.value(forKey: "force") as? Bool ?? false
269
-
310
+
270
311
  DispatchQueue.main.async { [weak self] in
271
- guard let peer = HmsHelper.getPeerFromPeerId(peerId, remotePeers: self?.hms?.remotePeers, localPeer:self?.hms?.localPeer),
312
+ guard let peer = HmsHelper.getPeerFromPeerId(peerId, remotePeers: self?.hms?.remotePeers, localPeer: self?.hms?.localPeer),
272
313
  let role = HmsHelper.getRoleFromRoleName(role, roles: self?.hms?.roles)
273
314
  else { return }
274
-
315
+
275
316
  self?.hms?.changeRole(for: peer, to: role, force: force, completion: { success, error in
276
- if(success) {
317
+ if success {
277
318
  resolve?(["success": true])
278
- } else{
279
- self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id":self?.id ?? "12345"])
280
- reject?(error?.message, error?.localizedDescription,nil)
319
+ } else {
320
+ self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id": self?.id ?? "12345"])
321
+ reject?(error?.message, error?.localizedDescription, nil)
281
322
  }
282
323
  })
283
324
  }
284
325
  }
285
-
326
+
286
327
  func changeTrackState(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
287
-
328
+
288
329
  guard let trackId = data.value(forKey: "trackId") as? String
289
330
  else {
290
331
  let error = HMSError(id: "112", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
291
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
332
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
292
333
  return
293
334
  }
294
-
335
+
295
336
  let mute = data.value(forKey: "mute") as? Bool ?? true
296
-
337
+
297
338
  DispatchQueue.main.async { [weak self] in
298
339
  guard let remotePeers = self?.hms?.remotePeers,
299
340
  let track = HmsHelper.getTrackFromTrackId(trackId, remotePeers)
300
341
  else { return }
301
342
 
302
343
  self?.hms?.changeTrackState(for: track, mute: mute, completion: { success, error in
303
- if(success) {
344
+ if success {
304
345
  resolve?(["success": true])
305
- } else{
306
- self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id":self?.id ?? "12345"])
346
+ } else {
347
+ self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id": self?.id ?? "12345"])
307
348
  reject?(error?.message, error?.localizedDescription, nil)
308
349
  }
309
350
  })
310
351
  }
311
352
  }
312
-
353
+
313
354
  func changeTrackStateForRoles(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
314
-
355
+
315
356
  guard let mute = data.value(forKey: "mute") as? Bool
316
357
  else {
317
358
  let error = HMSError(id: "113", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
318
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
359
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
319
360
  return
320
361
  }
321
362
  let source = data.value(forKey: "source") as? String
322
363
  let targetedRoles = data.value(forKey: "roles") as? [String]
323
364
  let type = data.value(forKey: "type") as? String
324
365
 
325
- var decodeType: HMSTrackKind? = nil;
326
- if( type != nil){
327
- if( type == "AUDIO") {
366
+ var decodeType: HMSTrackKind?
367
+ if type != nil {
368
+ if type == "AUDIO" {
328
369
  decodeType = HMSTrackKind.audio
329
- }else {
370
+ } else {
330
371
  decodeType = HMSTrackKind.video
331
372
  }
332
373
  }
333
-
374
+
334
375
  DispatchQueue.main.async { [weak self] in
335
376
  let encodedTargetedRoles = HmsHelper.getRolesFromRoleNames(targetedRoles, roles: self?.hms?.roles)
336
377
  self?.hms?.changeTrackState(mute: mute, for: decodeType, source: source, roles: encodedTargetedRoles, completion: { success, error in
337
- if(success) {
378
+ if success {
338
379
  resolve?(["success": true])
339
- } else{
340
- self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id":self?.id ?? "12345"])
341
- reject?(error?.message, error?.localizedDescription,nil)
380
+ } else {
381
+ self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id": self?.id ?? "12345"])
382
+ reject?(error?.message, error?.localizedDescription, nil)
342
383
  }
343
384
  })
344
385
  }
345
386
  }
346
-
387
+
347
388
  func isMute(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
348
389
  guard let trackId = data.value(forKey: "trackId") as? String
349
390
  else {
350
391
  reject?(nil, "NO_SDK_ID", nil)
351
392
  let error = HMSError(id: "114", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
352
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
393
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
353
394
  return
354
395
  }
355
-
396
+
356
397
  DispatchQueue.main.async { [weak self] in
357
398
  guard let strongSelf = self else { return }
358
399
  guard let localPeer = self?.hms?.localPeer,
@@ -362,7 +403,7 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
362
403
  let track = HmsHelper.getTrackFromTrackId(trackId, remotePeers)
363
404
  else {
364
405
  let error = HMSError(id: "120", code: HMSErrorCode.genericErrorUnknown, message: "NOT_FOUND")
365
- strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id":strongSelf.id])
406
+ strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id": strongSelf.id])
366
407
  reject?(nil, "NOT_FOUND", nil)
367
408
  return
368
409
  }
@@ -374,64 +415,63 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
374
415
  resolve?(mute)
375
416
  }
376
417
  }
377
-
418
+
378
419
  func removePeer(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
379
-
420
+
380
421
  guard let peerId = data.value(forKey: "peerId") as? String
381
422
  else {
382
423
  let error = HMSError(id: "115", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
383
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
424
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
384
425
  return
385
426
  }
386
-
427
+
387
428
  let reason = data.value(forKey: "reason") as? String
388
-
429
+
389
430
  DispatchQueue.main.async { [weak self] in
390
431
 
391
432
  guard let remotePeers = self?.hms?.remotePeers,
392
433
  let peer = HmsHelper.getRemotePeerFromPeerId(peerId, remotePeers: remotePeers)
393
434
  else { return }
394
-
435
+
395
436
  self?.hms?.removePeer(peer, reason: reason ?? "Removed from room", completion: { success, error in
396
- if(success) {
437
+ if success {
397
438
  resolve?(["success": true])
398
- } else{
399
- self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id":self?.id ?? "12345"])
400
- reject?(error?.message, error?.localizedDescription,nil)
439
+ } else {
440
+ self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id": self?.id ?? "12345"])
441
+ reject?(error?.message, error?.localizedDescription, nil)
401
442
  }
402
443
  })
403
444
  }
404
445
  }
405
-
406
-
446
+
407
447
  func endRoom(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
408
-
448
+
409
449
  guard let lock = data.value(forKey: "lock") as? Bool,
410
450
  let reason = data.value(forKey: "reason") as? String
411
451
  else {
412
452
  let error = HMSError(id: "116", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
413
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
453
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
414
454
  return
415
455
  }
416
-
456
+
417
457
  DispatchQueue.main.async { [weak self] in
418
458
  self?.hms?.endRoom(lock: lock, reason: reason, completion: { success, error in
419
- if(success) {
459
+ if success {
420
460
  resolve?(["success": true])
421
- } else{
422
- self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id":self?.id ?? "12345"])
423
- reject?(error?.message, error?.localizedDescription,nil)
461
+ } else {
462
+ self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id": self?.id ?? "12345"])
463
+ reject?(error?.message, error?.localizedDescription, nil)
424
464
  }
425
465
  })
426
466
  }
427
467
  }
428
-
468
+
429
469
  func isPlaybackAllowed(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
430
470
  guard let trackId = data.value(forKey: "trackId") as? String
431
471
  else {
432
472
  reject?(nil, "NOT_FOUND", nil)
433
473
  let error = HMSError(id: "117", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
434
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
474
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
435
475
  return
436
476
  }
437
477
  DispatchQueue.main.async { [weak self] in
@@ -439,41 +479,41 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
439
479
  guard let remotePeers = self?.hms?.remotePeers
440
480
  else {
441
481
  let error = HMSError(id: "121", code: HMSErrorCode.genericErrorUnknown, message: "NOT_FOUND")
442
- strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id":strongSelf.id])
482
+ strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id": strongSelf.id])
443
483
  reject?(nil, "NOT_FOUND", nil)
444
484
  return
445
485
  }
446
486
  let remoteAudioTrack = HmsHelper.getRemoteAudioTrackFromTrackId(trackId, remotePeers)
447
487
  let remoteVideoTrack = HmsHelper.getRemoteVideoTrackFromTrackId(trackId, remotePeers)
448
- if (remoteAudioTrack != nil) {
488
+ if remoteAudioTrack != nil {
449
489
  let isPlaybackAllowed = remoteAudioTrack?.isPlaybackAllowed()
450
490
  resolve?(isPlaybackAllowed)
451
491
  return
452
- } else if (remoteVideoTrack != nil) {
492
+ } else if remoteVideoTrack != nil {
453
493
  let isPlaybackAllowed = remoteVideoTrack?.isPlaybackAllowed()
454
494
  resolve?(isPlaybackAllowed)
455
495
  return
456
496
  } else {
457
497
  let error = HMSError(id: "122", code: HMSErrorCode.genericErrorUnknown, message: "NOT_FOUND")
458
- strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id":strongSelf.id])
459
- reject?(nil, "NOT_FOUND",nil)
498
+ strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id": strongSelf.id])
499
+ reject?(nil, "NOT_FOUND", nil)
460
500
  return
461
501
  }
462
502
  }
463
503
  }
464
-
504
+
465
505
  func getRoom(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
466
506
  let roomData = HmsDecoder.getHmsRoom(hms?.room)
467
-
507
+
468
508
  resolve?(roomData)
469
509
  }
470
-
510
+
471
511
  func setPlaybackAllowed(_ data: NSDictionary) {
472
512
  guard let trackId = data.value(forKey: "trackId") as? String,
473
513
  let playbackAllowed = data.value(forKey: "playbackAllowed") as? Bool
474
514
  else {
475
515
  let error = HMSError(id: "118", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
476
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
516
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
477
517
  return
478
518
  }
479
519
  DispatchQueue.main.async { [weak self] in
@@ -483,33 +523,33 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
483
523
  }
484
524
  let remoteAudioTrack = HmsHelper.getRemoteAudioTrackFromTrackId(trackId, remotePeers)
485
525
  let remoteVideoTrack = HmsHelper.getRemoteVideoTrackFromTrackId(trackId, remotePeers)
486
- if (remoteAudioTrack != nil) {
487
- if(playbackAllowed){
526
+ if remoteAudioTrack != nil {
527
+ if playbackAllowed {
488
528
  remoteAudioTrack?.setPlaybackAllowed(playbackAllowed)
489
- }else {
529
+ } else {
490
530
  remoteAudioTrack?.setPlaybackAllowed(playbackAllowed)
491
531
  }
492
- } else if (remoteVideoTrack != nil) {
532
+ } else if remoteVideoTrack != nil {
493
533
  remoteVideoTrack?.setPlaybackAllowed(playbackAllowed)
494
534
  }
495
535
  }
496
536
  }
497
-
537
+
498
538
  func changeMetadata(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
499
539
  guard let metadata = data.value(forKey: "metadata") as? String
500
540
  else {
501
541
  let error = HMSError(id: "123", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
502
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
542
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
503
543
  reject?(nil, "REQUIRED_KEYS_NOT_FOUND", nil)
504
544
  return
505
545
  }
506
-
546
+
507
547
  hms?.change(metadata: metadata, completion: { success, error in
508
- if (success) {
548
+ if success {
509
549
  resolve?(["success": success])
510
550
  return
511
551
  } else {
512
- self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id":self.id])
552
+ self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id": self.id])
513
553
  reject?(error?.message, error?.localizedDescription, nil)
514
554
  return
515
555
  }
@@ -521,134 +561,161 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
521
561
  let volume = data.value(forKey: "volume") as? Double
522
562
  else {
523
563
  let error = HMSError(id: "124", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
524
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
564
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
525
565
  return
526
566
  }
527
567
 
528
568
  DispatchQueue.main.async { [weak self] in
529
569
  guard let strongSelf = self else { return }
530
570
  let remotePeers = self?.hms?.remotePeers
531
-
571
+
532
572
  let remoteAudioTrack = HmsHelper.getRemoteAudioAuxiliaryTrackFromTrackId(trackId, remotePeers)
533
-
534
- if (remoteAudioTrack != nil) {
573
+
574
+ if remoteAudioTrack != nil {
535
575
  remoteAudioTrack?.setVolume(volume)
536
576
  } else {
537
577
  let error = HMSError(id: "125", code: HMSErrorCode.genericErrorUnknown, message: "TRACK_ID_NOT_FOUND_IN_REMOTE_TRACKS")
538
- strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id":strongSelf.id])
578
+ strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id": strongSelf.id])
539
579
  }
540
580
  }
541
581
  }
542
-
582
+
543
583
  func startRTMPOrRecording(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
544
584
  guard let record = data.value(forKey: "record") as? Bool
545
585
  else {
546
586
  let error = HMSError(id: "126", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
547
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
587
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
548
588
  return
549
589
  }
550
-
590
+
551
591
  let meetingString = data.value(forKey: "meetingURL") as? String
552
592
  let rtmpStrings = data.value(forKey: "rtmpURLs") as? [String]
553
-
554
- var meetingUrl: URL? = nil
593
+
594
+ var meetingUrl: URL?
555
595
  if let meetLink = meetingString {
556
596
  meetingUrl = URL(string: meetLink)
557
597
  } else {
558
598
  let error = HMSError(id: "127", code: HMSErrorCode.genericErrorUnknown, message: "INVALID_MEETING_URL_PASSED")
559
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
599
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
560
600
  }
561
-
601
+
562
602
  let URLs = HmsHelper.getRtmpUrls(rtmpStrings)
563
-
564
-
603
+
565
604
  let config = HMSRTMPConfig(meetingURL: meetingUrl, rtmpURLs: URLs, record: record)
566
605
  hms?.startRTMPOrRecording(config: config, completion: { success, error in
567
- if (success) {
606
+ if success {
568
607
  let roomData = HmsDecoder.getHmsRoom(self.hms?.room)
569
608
  let type = self.getString(from: HMSRoomUpdate.browserRecordingStateUpdated)
570
-
609
+
571
610
  let localPeerData = HmsDecoder.getHmsLocalPeer(self.hms?.localPeer)
572
611
  let remotePeerData = HmsDecoder.getHmsRemotePeers(self.hms?.remotePeers)
573
612
  self.delegate?.emitEvent(self.ON_ROOM_UPDATE, ["event": self.ON_ROOM_UPDATE, "id": self.id, "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
574
613
  resolve?(["success": success])
575
614
  return
576
615
  } else {
577
- self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id":self.id])
616
+ self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id": self.id])
578
617
  reject?(error?.message, error?.localizedDescription, nil)
579
618
  return
580
619
  }
581
620
  })
582
621
  }
583
-
622
+
584
623
  func stopRtmpAndRecording(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
585
624
  hms?.stopRTMPAndRecording(completion: { success, error in
586
- if (success) {
625
+ if success {
587
626
  let roomData = HmsDecoder.getHmsRoom(self.hms?.room)
588
627
  let type = self.getString(from: HMSRoomUpdate.browserRecordingStateUpdated)
589
-
628
+
590
629
  let localPeerData = HmsDecoder.getHmsLocalPeer(self.hms?.localPeer)
591
630
  let remotePeerData = HmsDecoder.getHmsRemotePeers(self.hms?.remotePeers)
592
631
  self.delegate?.emitEvent(self.ON_ROOM_UPDATE, ["event": self.ON_ROOM_UPDATE, "id": self.id, "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
593
632
  resolve?(["success": success])
594
633
  return
595
634
  } else {
596
- self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id":self.id])
635
+ self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id": self.id])
597
636
  reject?(error?.message, error?.localizedDescription, nil)
598
637
  return
599
638
  }
600
639
  })
601
640
  }
602
-
641
+
603
642
  func startHLSStreaming(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
604
643
  guard let meetingURLVariants = data.value(forKey: "meetingURLVariants") as? [[String: Any]]?
605
644
  else {
606
645
  let error = HMSError(id: "126", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
607
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
646
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
608
647
  return
609
648
  }
610
649
 
650
+ let recordConfig = HmsHelper.getHlsRecordingConfig(data)
611
651
  let hlsMeetingUrlVariant = HmsHelper.getHMSHLSMeetingURLVariants(meetingURLVariants)
612
- let config = HMSHLSConfig(variants: hlsMeetingUrlVariant)
613
-
652
+ let config = HMSHLSConfig(variants: hlsMeetingUrlVariant, recording: recordConfig)
653
+
614
654
  hms?.startHLSStreaming(config: config, completion: { success, error in
615
- if (success) {
655
+ if success {
616
656
  let roomData = HmsDecoder.getHmsRoom(self.hms?.room)
617
657
  let type = self.getString(from: HMSRoomUpdate.hlsStreamingStateUpdated)
618
-
658
+
619
659
  let localPeerData = HmsDecoder.getHmsLocalPeer(self.hms?.localPeer)
620
660
  let remotePeerData = HmsDecoder.getHmsRemotePeers(self.hms?.remotePeers)
621
661
  self.delegate?.emitEvent(self.ON_ROOM_UPDATE, ["event": self.ON_ROOM_UPDATE, "id": self.id, "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
622
662
  resolve?(["success": success])
623
663
  return
624
664
  } else {
625
- self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id":self.id])
665
+ self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id": self.id])
626
666
  reject?(error?.message, error?.localizedDescription, nil)
627
667
  return
628
668
  }
629
669
  })
630
670
  }
631
-
671
+
632
672
  func stopHLSStreaming(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
633
673
  hms?.stopHLSStreaming(config: nil, completion: { success, error in
634
- if (success) {
674
+ if success {
635
675
  let roomData = HmsDecoder.getHmsRoom(self.hms?.room)
636
676
  let type = self.getString(from: HMSRoomUpdate.browserRecordingStateUpdated)
637
-
677
+
638
678
  let localPeerData = HmsDecoder.getHmsLocalPeer(self.hms?.localPeer)
639
679
  let remotePeerData = HmsDecoder.getHmsRemotePeers(self.hms?.remotePeers)
640
680
  self.delegate?.emitEvent(self.ON_ROOM_UPDATE, ["event": self.ON_ROOM_UPDATE, "id": self.id, "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
641
681
  resolve?(["success": success])
642
682
  return
643
683
  } else {
644
- self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id":self.id])
684
+ self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id": self.id])
645
685
  reject?(error?.message, error?.localizedDescription, nil)
646
686
  return
647
687
  }
648
688
  })
649
689
  }
650
690
 
651
- //TODO: to be implemented after volume is exposed for iOS
691
+ func changeName(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
692
+ guard let name = data.value(forKey: "name") as? String
693
+ else {
694
+ let error = HMSError(id: "123", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
695
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
696
+ reject?(nil, "REQUIRED_KEYS_NOT_FOUND", nil)
697
+ return
698
+ }
699
+
700
+ hms?.change(name: name) { success, error in
701
+ if success {
702
+ resolve?(["success": success])
703
+ } else {
704
+ self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id": self.id])
705
+ reject?(error?.message, error?.localizedDescription, nil)
706
+ }
707
+ }
708
+ }
709
+
710
+ func enableRTCStats() {
711
+ rtcStatsAttached = true
712
+ }
713
+
714
+ func disableRTCStats() {
715
+ rtcStatsAttached = false
716
+ }
717
+
718
+ // TODO: to be implemented after volume is exposed for iOS
652
719
  // func getVolume(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
653
720
  // guard let trackId = data.value(forKey: "trackId") as? String
654
721
  // else {
@@ -662,7 +729,7 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
662
729
  //
663
730
  // }
664
731
  // }
665
-
732
+
666
733
  // func setLocalVideoSettings(_ data: NSDictionary) {
667
734
  // let localVideoTrack = self.hms?.localPeer?.localVideoTrack()
668
735
  //
@@ -673,104 +740,104 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
673
740
  // }
674
741
  // localVideoTrack?.settings = settings
675
742
  // }
676
-
743
+
677
744
  // MARK: - HMS SDK Delegate Callbacks
678
-
745
+
679
746
  func on(join room: HMSRoom) {
680
747
  // Callback from join action
681
748
  let roomData = HmsDecoder.getHmsRoom(room)
682
749
  let localPeerData = HmsDecoder.getHmsLocalPeer(hms?.localPeer)
683
750
  let remotePeerData = HmsDecoder.getHmsRemotePeers(hms?.remotePeers)
684
-
751
+
685
752
  let decodedRoles = HmsDecoder.getAllRoles(hms?.roles)
686
-
687
- self.delegate?.emitEvent(ON_JOIN, ["event": ON_JOIN, "id": self.id , "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData, "roles": decodedRoles])
753
+ self.recentPreviewTracks = []
754
+ self.delegate?.emitEvent(ON_JOIN, ["event": ON_JOIN, "id": self.id, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData, "roles": decodedRoles])
688
755
  }
689
-
756
+
690
757
  func onPreview(room: HMSRoom, localTracks: [HMSTrack]) {
691
758
  let previewTracks = HmsDecoder.getPreviewTracks(localTracks)
692
759
  let hmsRoom = HmsDecoder.getHmsRoom(room)
693
760
  let localPeerData = HmsDecoder.getHmsLocalPeer(hms?.localPeer)
694
-
761
+
695
762
  previewInProgress = false
696
- self.delegate?.emitEvent(ON_PREVIEW, ["event": ON_PREVIEW, "id": self.id , "room": hmsRoom, "previewTracks": previewTracks, "localPeer": localPeerData])
763
+ self.delegate?.emitEvent(ON_PREVIEW, ["event": ON_PREVIEW, "id": self.id, "room": hmsRoom, "previewTracks": previewTracks, "localPeer": localPeerData])
697
764
  }
698
-
765
+
699
766
  func on(room: HMSRoom, update: HMSRoomUpdate) {
700
767
  // Listener for any updation in room
701
768
  let roomData = HmsDecoder.getHmsRoom(room)
702
769
  let type = getString(from: update)
703
-
770
+
704
771
  let localPeerData = HmsDecoder.getHmsLocalPeer(hms?.localPeer)
705
772
  let remotePeerData = HmsDecoder.getHmsRemotePeers(hms?.remotePeers)
706
-
707
- self.delegate?.emitEvent(ON_ROOM_UPDATE, ["event": ON_ROOM_UPDATE, "id": self.id , "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
773
+
774
+ self.delegate?.emitEvent(ON_ROOM_UPDATE, ["event": ON_ROOM_UPDATE, "id": self.id, "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
708
775
  }
709
-
776
+
710
777
  func on(peer: HMSPeer, update: HMSPeerUpdate) {
711
778
  // Listener for updates in Peers
712
779
  let roomData = HmsDecoder.getHmsRoom(hms?.room)
713
780
  let type = getString(from: update)
714
-
781
+
715
782
  let localPeerData = HmsDecoder.getHmsLocalPeer(hms?.localPeer)
716
783
  let remotePeerData = HmsDecoder.getHmsRemotePeers(hms?.remotePeers)
717
784
  let hmsPeer = HmsDecoder.getHmsPeer(peer)
718
-
785
+
719
786
  self.delegate?.emitEvent(ON_PEER_UPDATE, ["event": ON_PEER_UPDATE, "id": self.id, "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData, "peer": hmsPeer])
720
787
  }
721
-
788
+
722
789
  func on(track: HMSTrack, update: HMSTrackUpdate, for peer: HMSPeer) {
723
790
  // Listener for updates in Tracks
724
791
  let roomData = HmsDecoder.getHmsRoom(hms?.room)
725
792
  let type = getString(from: update)
726
-
793
+
727
794
  let localPeerData = HmsDecoder.getHmsLocalPeer(hms?.localPeer)
728
795
  let remotePeerData = HmsDecoder.getHmsRemotePeers(hms?.remotePeers)
729
796
  let hmsPeer = HmsDecoder.getHmsPeer(peer)
730
797
  let hmsTrack = HmsDecoder.getHmsTrack(track)
731
-
798
+
732
799
  self.delegate?.emitEvent(ON_TRACK_UPDATE, ["event": ON_TRACK_UPDATE, "id": self.id, "room": roomData, "type": type, "localPeer": localPeerData, "remotePeers": remotePeerData, "peer": hmsPeer, "track": hmsTrack])
733
800
  }
734
-
801
+
735
802
  func on(error: HMSError) {
736
- if (previewInProgress) { previewInProgress = false }
737
- self.delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
803
+ if previewInProgress { previewInProgress = false }
804
+ self.delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
738
805
  }
739
-
806
+
740
807
  func on(message: HMSMessage) {
741
- self.delegate?.emitEvent(ON_MESSAGE, ["event": ON_MESSAGE, "id": self.id , "sender": message.sender?.name ?? "", "time": message.time, "message": message.message, "type": message.type])
808
+ self.delegate?.emitEvent(ON_MESSAGE, ["event": ON_MESSAGE, "id": self.id, "sender": HmsDecoder.getHmsPeer(message.sender), "recipient": HmsDecoder.getHmsMessageRecipient(message.recipient), "time": message.time.timeIntervalSince1970 * 1000, "message": message.message, "type": message.type])
742
809
  }
743
-
810
+
744
811
  func on(updated speakers: [HMSSpeaker]) {
745
- var speakerPeerIds: [[String : Any]] = []
812
+ var speakerPeerIds: [[String: Any]] = []
746
813
  for speaker in speakers {
747
814
  speakerPeerIds.append(["peer": HmsDecoder.getHmsPeer(speaker.peer), "level": speaker.level, "track": HmsDecoder.getHmsTrack(speaker.track)])
748
815
  }
749
- self.delegate?.emitEvent(ON_SPEAKER, ["event": ON_SPEAKER, "id": self.id , "count": speakers.count, "peers" :speakerPeerIds])
816
+ self.delegate?.emitEvent(ON_SPEAKER, ["event": ON_SPEAKER, "id": self.id, "count": speakers.count, "peers": speakerPeerIds])
750
817
  }
751
-
818
+
752
819
  func onReconnecting() {
753
820
  self.delegate?.emitEvent(RECONNECTING, ["event": RECONNECTING, "id": self.id ])
754
821
  }
755
-
822
+
756
823
  func onReconnected() {
757
824
  self.delegate?.emitEvent(RECONNECTED, ["event": RECONNECTED, "id": self.id ])
758
825
  }
759
-
826
+
760
827
  func on(roleChangeRequest: HMSRoleChangeRequest) {
761
828
  let decodedRoleChangeRequest = HmsDecoder.getHmsRoleChangeRequest(roleChangeRequest, self.id)
762
829
  recentRoleChangeRequest = roleChangeRequest
763
830
  self.delegate?.emitEvent(ON_ROLE_CHANGE_REQUEST, decodedRoleChangeRequest)
764
831
  }
765
-
832
+
766
833
  func on(changeTrackStateRequest: HMSChangeTrackStateRequest) {
767
834
  let decodedChangeTrackStateRequest = HmsDecoder.getHmsChangeTrackStateRequest(changeTrackStateRequest, id)
768
835
  delegate?.emitEvent("ON_CHANGE_TRACK_STATE_REQUEST", decodedChangeTrackStateRequest)
769
836
  }
770
-
837
+
771
838
  func on(removedFromRoom notification: HMSRemovedFromRoomNotification) {
772
839
  let requestedBy = notification.requestedBy as HMSPeer?
773
- var decodedRequestedBy: [String: Any]? = nil
840
+ var decodedRequestedBy: [String: Any]?
774
841
  if let requested = requestedBy {
775
842
  decodedRequestedBy = HmsDecoder.getHmsPeer(requested)
776
843
  }
@@ -779,17 +846,86 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
779
846
  self.delegate?.emitEvent(ON_REMOVED_FROM_ROOM, ["event": ON_REMOVED_FROM_ROOM, "id": self.id, "requestedBy": decodedRequestedBy as Any, "reason": reason, "roomEnded": roomEnded ])
780
847
  }
781
848
 
849
+ func on(rtcStats: HMSRTCStatsReport) {
850
+ if (!rtcStatsAttached) {
851
+ return
852
+ }
853
+ let video = HmsDecoder.getHMSRTCStats(rtcStats.video)
854
+ let audio = HmsDecoder.getHMSRTCStats(rtcStats.audio)
855
+ let combined = HmsDecoder.getHMSRTCStats(rtcStats.combined)
856
+
857
+ self.delegate?.emitEvent(ON_RTC_STATS, ["video": video, "audio": audio, "combined": combined, "id": self.id])
858
+ }
782
859
 
783
- // MARK: Helper Functions
860
+ func on(localAudioStats: HMSLocalAudioStats, track: HMSLocalAudioTrack, peer: HMSPeer) {
861
+ if (!rtcStatsAttached) {
862
+ return
863
+ }
864
+ let localStats = HmsDecoder.getLocalAudioStats(localAudioStats)
865
+ let localTrack = HmsDecoder.getHmsLocalAudioTrack(track)
866
+ let decodedPeer = HmsDecoder.getHmsPeer(peer)
867
+
868
+ self.delegate?.emitEvent(ON_LOCAL_AUDIO_STATS, ["localAudioStats": localStats, "track": localTrack, "peer": decodedPeer, "id": self.id])
869
+ }
870
+
871
+ func on(localVideoStats: HMSLocalVideoStats, track: HMSLocalVideoTrack, peer: HMSPeer) {
872
+ if (!rtcStatsAttached) {
873
+ return
874
+ }
875
+ let localStats = HmsDecoder.getLocalVideoStats(localVideoStats)
876
+ let decodedPeer = HmsDecoder.getHmsPeer(peer)
877
+ let localTrack = HmsDecoder.getHmsLocalVideoTrack(track)
878
+
879
+ self.delegate?.emitEvent(ON_LOCAL_VIDEO_STATS, ["localVideoStats": localStats, "track": localTrack, "peer": decodedPeer, "id": self.id])
880
+ }
881
+
882
+ func on(remoteAudioStats: HMSRemoteAudioStats, track: HMSRemoteAudioTrack, peer: HMSPeer) {
883
+ if (!rtcStatsAttached) {
884
+ return
885
+ }
886
+ let remoteStats = HmsDecoder.getRemoteAudioStats(remoteAudioStats)
887
+ let remoteTrack = HmsDecoder.getHMSRemoteAudioTrack(track)
888
+ let decodedPeer = HmsDecoder.getHmsPeer(peer)
889
+
890
+ self.delegate?.emitEvent(ON_REMOTE_AUDIO_STATS, ["remoteAudioStats": remoteStats, "track": remoteTrack, "peer": decodedPeer, "id": self.id])
891
+ }
784
892
 
785
- func muteAllPeersAudio(_ data: NSDictionary) {
893
+ func on(remoteVideoStats: HMSRemoteVideoStats, track: HMSRemoteVideoTrack, peer: HMSPeer) {
894
+ if (!rtcStatsAttached) {
895
+ return
896
+ }
897
+ let remoteStats = HmsDecoder.getRemoteVideoStats(remoteVideoStats)
898
+ let decodedPeer = HmsDecoder.getHmsPeer(peer)
899
+ let remoteTrack = HmsDecoder.getHMSRemoteVideoTrack(track)
900
+
901
+ self.delegate?.emitEvent(ON_REMOTE_VIDEO_STATS, ["remoteVideoStats": remoteStats, "track": remoteTrack, "peer": decodedPeer, "id": self.id])
902
+ }
903
+
904
+ // MARK: Helper Functions
905
+ func remoteMuteAllAudio() {
906
+ let allAudioTracks = HMSUtilities.getAllAudioTracks(in: (self.hms?.room)!!)
907
+ var customError: HMSError? = nil
908
+ for audioTrack in allAudioTracks {
909
+ self.hms?.changeTrackState(for: audioTrack, mute: true, completion: { success, error in
910
+ if success {
911
+ } else {
912
+ customError = error
913
+ }
914
+ })
915
+ }
916
+ if (customError != nil) {
917
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(customError), "id": id])
918
+ }
919
+ }
920
+
921
+ func setPlaybackForAllAudio(_ data: NSDictionary) {
786
922
  guard let mute = data.value(forKey: "mute") as? Bool
787
923
  else {
788
924
  let error = HMSError(id: "119", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
789
- delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
925
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id": id])
790
926
  return
791
927
  }
792
-
928
+
793
929
  DispatchQueue.main.async { [weak self] in
794
930
  let remotePeers = self?.hms?.remotePeers
795
931
  for peer in remotePeers ?? [] {
@@ -799,10 +935,10 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
799
935
  let roomData = HmsDecoder.getHmsRoom(hms?.room)
800
936
  let localPeerData = HmsDecoder.getHmsLocalPeer(hms?.localPeer)
801
937
  let remotePeerData = HmsDecoder.getHmsRemotePeers(hms?.remotePeers)
802
-
938
+
803
939
  self.delegate?.emitEvent(ON_PEER_UPDATE, ["event": ON_PEER_UPDATE, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
804
940
  }
805
-
941
+
806
942
  private func getString(from update: HMSPeerUpdate) -> String {
807
943
  switch update {
808
944
  case .peerJoined:
@@ -813,11 +949,17 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
813
949
  return "ROLE_CHANGED"
814
950
  case .metadataUpdated:
815
951
  return "METADATA_CHANGED"
952
+ case .nameUpdated:
953
+ return "NAME_CHANGED"
954
+ case .defaultUpdate:
955
+ return "DEFAULT_UPDATE"
956
+ case .networkQualityUpdated:
957
+ return "NETWORK_QUALITY_UPDATED"
816
958
  default:
817
959
  return ""
818
960
  }
819
961
  }
820
-
962
+
821
963
  private func getString(from update: HMSTrackUpdate) -> String {
822
964
  switch update {
823
965
  case .trackAdded:
@@ -838,7 +980,7 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
838
980
  return ""
839
981
  }
840
982
  }
841
-
983
+
842
984
  func getString(from update: HMSRoomUpdate) -> String {
843
985
  switch update {
844
986
  case .roomTypeChanged:
@@ -859,8 +1001,8 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
859
1001
  }
860
1002
  }
861
1003
 
862
- //extension HmsSDK: HMSLogger {
1004
+ // extension HmsSDK: HMSLogger {
863
1005
  // func log(_ message: String, _ level: HMSLogLevel) {
864
1006
  //
865
1007
  // }
866
- //}
1008
+ // }