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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/README.md +6 -6
  2. package/android/.gradle/6.9/executionHistory/executionHistory.lock +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/cache.properties +1 -1
  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/build.gradle +3 -2
  10. package/android/src/main/java/com/reactnativehmssdk/HmsDecoder.kt +226 -256
  11. package/android/src/main/java/com/reactnativehmssdk/HmsHelper.kt +82 -31
  12. package/android/src/main/java/com/reactnativehmssdk/HmsModule.kt +99 -22
  13. package/android/src/main/java/com/reactnativehmssdk/HmsSDK.kt +368 -221
  14. package/android/src/main/java/com/reactnativehmssdk/HmsScreenshareActivity.kt +66 -0
  15. package/android/src/main/java/com/reactnativehmssdk/HmsView.kt +43 -24
  16. package/android/src/main/java/com/reactnativehmssdk/HmssdkPackage.kt +1 -2
  17. package/android/src/main/java/com/reactnativehmssdk/HmssdkViewManager.kt +14 -11
  18. package/android/src/main/res/layout/hms_view.xml +19 -0
  19. package/ios/HmsDecoder.swift +91 -22
  20. package/ios/HmsHelper.swift +34 -3
  21. package/ios/HmsManager.m +11 -9
  22. package/ios/HmsManager.swift +32 -18
  23. package/ios/HmsSDK.swift +193 -43
  24. package/ios/HmsView.swift +22 -54
  25. package/lib/commonjs/classes/HMSChangeTrackStateRequest.js +3 -0
  26. package/lib/commonjs/classes/HMSChangeTrackStateRequest.js.map +1 -1
  27. package/lib/commonjs/classes/HMSEncoder.js +10 -6
  28. package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
  29. package/lib/commonjs/classes/HMSHLSConfig.js +20 -0
  30. package/lib/commonjs/classes/HMSHLSConfig.js.map +1 -0
  31. package/lib/commonjs/classes/HMSHLSMeetingURLVariant.js +23 -0
  32. package/lib/commonjs/classes/HMSHLSMeetingURLVariant.js.map +1 -0
  33. package/lib/commonjs/classes/HMSHLSStreamingState.js +23 -0
  34. package/lib/commonjs/classes/HMSHLSStreamingState.js.map +1 -0
  35. package/lib/commonjs/classes/HMSHLSVariant.js +29 -0
  36. package/lib/commonjs/classes/HMSHLSVariant.js.map +1 -0
  37. package/lib/commonjs/classes/HMSLocalAudioTrack.js +20 -0
  38. package/lib/commonjs/classes/HMSLocalAudioTrack.js.map +1 -1
  39. package/lib/commonjs/classes/HMSLocalPeer.js.map +1 -1
  40. package/lib/commonjs/classes/HMSLocalVideoTrack.js +18 -0
  41. package/lib/commonjs/classes/HMSLocalVideoTrack.js.map +1 -1
  42. package/lib/commonjs/classes/HMSLogger.js +55 -1
  43. package/lib/commonjs/classes/HMSLogger.js.map +1 -1
  44. package/lib/commonjs/classes/HMSRemoteAudioTrack.js +19 -0
  45. package/lib/commonjs/classes/HMSRemoteAudioTrack.js.map +1 -1
  46. package/lib/commonjs/classes/HMSRemoteVideoTrack.js +19 -0
  47. package/lib/commonjs/classes/HMSRemoteVideoTrack.js.map +1 -1
  48. package/lib/commonjs/classes/HMSRoom.js +3 -0
  49. package/lib/commonjs/classes/HMSRoom.js.map +1 -1
  50. package/lib/commonjs/classes/HMSRoomUpdate.js +6 -0
  51. package/lib/commonjs/classes/HMSRoomUpdate.js.map +1 -1
  52. package/lib/commonjs/classes/HMSSDK.js +297 -145
  53. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  54. package/lib/commonjs/classes/HMSTrackSettings.js +3 -0
  55. package/lib/commonjs/classes/HMSTrackSettings.js.map +1 -1
  56. package/lib/commonjs/classes/HMSVideoCodec.js +4 -4
  57. package/lib/commonjs/classes/HMSVideoCodec.js.map +1 -1
  58. package/lib/commonjs/classes/HmsView.js +26 -4
  59. package/lib/commonjs/classes/HmsView.js.map +1 -1
  60. package/lib/commonjs/index.js +70 -0
  61. package/lib/commonjs/index.js.map +1 -1
  62. package/lib/module/classes/HMSChangeTrackStateRequest.js +3 -0
  63. package/lib/module/classes/HMSChangeTrackStateRequest.js.map +1 -1
  64. package/lib/module/classes/HMSEncoder.js +10 -6
  65. package/lib/module/classes/HMSEncoder.js.map +1 -1
  66. package/lib/module/classes/HMSHLSConfig.js +11 -0
  67. package/lib/module/classes/HMSHLSConfig.js.map +1 -0
  68. package/lib/module/classes/HMSHLSMeetingURLVariant.js +14 -0
  69. package/lib/module/classes/HMSHLSMeetingURLVariant.js.map +1 -0
  70. package/lib/module/classes/HMSHLSStreamingState.js +14 -0
  71. package/lib/module/classes/HMSHLSStreamingState.js.map +1 -0
  72. package/lib/module/classes/HMSHLSVariant.js +20 -0
  73. package/lib/module/classes/HMSHLSVariant.js.map +1 -0
  74. package/lib/module/classes/HMSLocalAudioTrack.js +17 -0
  75. package/lib/module/classes/HMSLocalAudioTrack.js.map +1 -1
  76. package/lib/module/classes/HMSLocalPeer.js.map +1 -1
  77. package/lib/module/classes/HMSLocalVideoTrack.js +15 -0
  78. package/lib/module/classes/HMSLocalVideoTrack.js.map +1 -1
  79. package/lib/module/classes/HMSLogger.js +55 -1
  80. package/lib/module/classes/HMSLogger.js.map +1 -1
  81. package/lib/module/classes/HMSRemoteAudioTrack.js +16 -0
  82. package/lib/module/classes/HMSRemoteAudioTrack.js.map +1 -1
  83. package/lib/module/classes/HMSRemoteVideoTrack.js +16 -0
  84. package/lib/module/classes/HMSRemoteVideoTrack.js.map +1 -1
  85. package/lib/module/classes/HMSRoom.js +3 -0
  86. package/lib/module/classes/HMSRoom.js.map +1 -1
  87. package/lib/module/classes/HMSRoomUpdate.js +6 -0
  88. package/lib/module/classes/HMSRoomUpdate.js.map +1 -1
  89. package/lib/module/classes/HMSSDK.js +295 -146
  90. package/lib/module/classes/HMSSDK.js.map +1 -1
  91. package/lib/module/classes/HMSTrackSettings.js +3 -0
  92. package/lib/module/classes/HMSTrackSettings.js.map +1 -1
  93. package/lib/module/classes/HMSVideoCodec.js +4 -4
  94. package/lib/module/classes/HMSVideoCodec.js.map +1 -1
  95. package/lib/module/classes/HmsView.js +23 -4
  96. package/lib/module/classes/HmsView.js.map +1 -1
  97. package/lib/module/index.js +5 -0
  98. package/lib/module/index.js.map +1 -1
  99. package/lib/typescript/classes/HMSChangeTrackStateRequest.d.ts +2 -0
  100. package/lib/typescript/classes/HMSHLSConfig.d.ts +7 -0
  101. package/lib/typescript/classes/HMSHLSMeetingURLVariant.d.ts +8 -0
  102. package/lib/typescript/classes/HMSHLSStreamingState.d.ts +9 -0
  103. package/lib/typescript/classes/HMSHLSVariant.d.ts +12 -0
  104. package/lib/typescript/classes/HMSLocalPeer.d.ts +3 -0
  105. package/lib/typescript/classes/HMSLogger.d.ts +9 -0
  106. package/lib/typescript/classes/HMSRoom.d.ts +3 -0
  107. package/lib/typescript/classes/HMSRoomUpdate.d.ts +7 -1
  108. package/lib/typescript/classes/HMSSDK.d.ts +22 -13
  109. package/lib/typescript/classes/HMSTrackSettings.d.ts +2 -0
  110. package/lib/typescript/classes/HMSVideoCodec.d.ts +4 -4
  111. package/lib/typescript/index.d.ts +5 -0
  112. package/package.json +1 -1
  113. package/react-native-hms.podspec +1 -1
  114. package/src/classes/HMSChangeTrackStateRequest.ts +7 -1
  115. package/src/classes/HMSEncoder.ts +5 -1
  116. package/src/classes/HMSHLSConfig.ts +9 -0
  117. package/src/classes/HMSHLSMeetingURLVariant.ts +9 -0
  118. package/src/classes/HMSHLSStreamingState.ts +11 -0
  119. package/src/classes/HMSHLSVariant.ts +18 -0
  120. package/src/classes/HMSLocalAudioTrack.ts +16 -0
  121. package/src/classes/HMSLocalPeer.ts +3 -0
  122. package/src/classes/HMSLocalVideoTrack.ts +15 -0
  123. package/src/classes/HMSLogger.ts +28 -1
  124. package/src/classes/HMSRemoteAudioTrack.ts +16 -0
  125. package/src/classes/HMSRemoteVideoTrack.ts +16 -0
  126. package/src/classes/HMSRoom.ts +4 -0
  127. package/src/classes/HMSRoomUpdate.ts +6 -0
  128. package/src/classes/HMSSDK.tsx +221 -84
  129. package/src/classes/HMSTrackSettings.ts +3 -0
  130. package/src/classes/HMSVideoCodec.ts +4 -4
  131. package/src/classes/HmsView.tsx +32 -4
  132. package/src/index.ts +5 -0
  133. package/android/.gradle/6.9/executionHistory/executionHistory.bin +0 -0
  134. package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
  135. package/android/.gradle/6.9/fileHashes/resourceHashesCache.bin +0 -0
  136. package/android/.gradle/6.9/javaCompile/classAnalysis.bin +0 -0
  137. package/android/.gradle/6.9/javaCompile/jarAnalysis.bin +0 -0
  138. package/android/.gradle/6.9/javaCompile/javaCompile.lock +0 -0
  139. package/android/.gradle/6.9/javaCompile/taskHistory.bin +0 -0
  140. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  141. package/android/.project +0 -34
@@ -99,52 +99,52 @@ class HmsManager: RCTEventEmitter{
99
99
  }
100
100
 
101
101
  @objc
102
- func sendBroadcastMessage(_ data: NSDictionary) {
102
+ func sendBroadcastMessage(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
103
103
  let hms = HmsHelper.getHms(data, hmsCollection)
104
104
 
105
- hms?.sendBroadcastMessage(data)
105
+ hms?.sendBroadcastMessage(data, resolve, reject)
106
106
  }
107
107
 
108
108
  @objc
109
- func sendGroupMessage(_ data: NSDictionary) {
109
+ func sendGroupMessage(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
110
110
  let hms = HmsHelper.getHms(data, hmsCollection)
111
111
 
112
- hms?.sendGroupMessage(data)
112
+ hms?.sendGroupMessage(data, resolve, reject)
113
113
  }
114
114
 
115
115
  @objc
116
- func sendDirectMessage(_ data: NSDictionary) {
116
+ func sendDirectMessage(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
117
117
  let hms = HmsHelper.getHms(data, hmsCollection)
118
118
 
119
- hms?.sendDirectMessage(data)
119
+ hms?.sendDirectMessage(data, resolve, reject)
120
120
  }
121
121
 
122
122
  @objc
123
- func acceptRoleChange(_ data: NSDictionary) {
123
+ func acceptRoleChange(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
124
124
  let hms = HmsHelper.getHms(data, hmsCollection)
125
125
 
126
- hms?.acceptRoleChange()
126
+ hms?.acceptRoleChange(resolve, reject)
127
127
  }
128
128
 
129
129
  @objc
130
- func changeRole(_ data: NSDictionary) {
130
+ func changeRole(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
131
131
  let hms = HmsHelper.getHms(data, hmsCollection)
132
132
 
133
- hms?.changeRole(data)
133
+ hms?.changeRole(data, resolve, reject)
134
134
  }
135
135
 
136
136
  @objc
137
- func changeTrackState(_ data: NSDictionary) {
137
+ func changeTrackState(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
138
138
  let hms = HmsHelper.getHms(data, hmsCollection)
139
139
 
140
- hms?.changeTrackState(data)
140
+ hms?.changeTrackState(data, resolve, reject)
141
141
  }
142
142
 
143
143
  @objc
144
- func changeTrackStateRoles(_ data: NSDictionary) {
144
+ func changeTrackStateForRoles(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
145
145
  let hms = HmsHelper.getHms(data, hmsCollection)
146
146
 
147
- hms?.changeTrackStateRoles(data)
147
+ hms?.changeTrackStateForRoles(data, resolve, reject)
148
148
  }
149
149
 
150
150
  @objc
@@ -160,18 +160,18 @@ class HmsManager: RCTEventEmitter{
160
160
 
161
161
 
162
162
  @objc
163
- func removePeer(_ data: NSDictionary) {
163
+ func removePeer(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
164
164
  let hms = HmsHelper.getHms(data, hmsCollection)
165
165
 
166
- hms?.removePeer(data)
166
+ hms?.removePeer(data, resolve, reject)
167
167
  }
168
168
 
169
169
 
170
170
  @objc
171
- func endRoom(_ data: NSDictionary) {
171
+ func endRoom(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
172
172
  let hms = HmsHelper.getHms(data, hmsCollection)
173
173
 
174
- hms?.endRoom(data)
174
+ hms?.endRoom(data, resolve, reject)
175
175
  }
176
176
 
177
177
  @objc
@@ -237,6 +237,20 @@ class HmsManager: RCTEventEmitter{
237
237
  hms?.stopRtmpAndRecording(resolve, reject)
238
238
  }
239
239
 
240
+ @objc
241
+ func startHLSStreaming(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
242
+ let hms = HmsHelper.getHms(data, hmsCollection)
243
+
244
+ hms?.startHLSStreaming(data, resolve, reject)
245
+ }
246
+
247
+ @objc
248
+ func stopHLSStreaming(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
249
+ let hms = HmsHelper.getHms(data, hmsCollection)
250
+
251
+ hms?.stopHLSStreaming(resolve, reject)
252
+ }
253
+
240
254
  // @objc
241
255
  // func setLocalVideoSettings(_ data: NSDictionary) {
242
256
  // let hms = HmsHelper.getHms(data, hmsCollection)
package/ios/HmsSDK.swift CHANGED
@@ -7,12 +7,13 @@
7
7
 
8
8
  import Foundation
9
9
  import HMSSDK
10
+
11
+
10
12
  class HmsSDK: HMSUpdateListener, HMSPreviewListener {
11
13
 
12
14
  var hms: HMSSDK?
13
15
  var config: HMSConfig?
14
16
  var recentRoleChangeRequest: HMSRoleChangeRequest?
15
- var recentChangeTrackStateRequest: HMSChangeTrackStateRequest?
16
17
  var delegate: HmsManager?
17
18
  var id: String = "12345"
18
19
 
@@ -45,9 +46,17 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
45
46
  }
46
47
 
47
48
  // MARK: - HMS SDK Actions
49
+
50
+ private var previewInProgress = false
48
51
 
49
52
  func preview(_ credentials: NSDictionary) {
50
53
 
54
+ guard !previewInProgress else {
55
+ let error = HMSError(id: "PREVIEW", code: .joinErrorServer, message: "PREVIEW_IS_IN_PROGRESS", params: ["function": #function, "credentials": credentials])
56
+ on(error: error)
57
+ return
58
+ }
59
+
51
60
  guard let authToken = credentials.value(forKey: "authToken") as? String,
52
61
  let user = credentials.value(forKey: "username") as? String
53
62
  else {
@@ -66,11 +75,19 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
66
75
  strongSelf.config = HMSConfig(userName: user, authToken: authToken, metadata: metadata)
67
76
  strongSelf.hms?.preview(config: strongSelf.config!, delegate: strongSelf)
68
77
  }
78
+ strongSelf.previewInProgress = true
69
79
  }
70
80
  }
71
81
 
82
+
72
83
  func join(_ credentials: NSDictionary) {
73
84
 
85
+ guard !previewInProgress else {
86
+ let error = HMSError(id: "PREVIEW", code: .joinErrorServer, message: "PREVIEW_IS_IN_PROGRESS", params: ["function": #function, "credentials": credentials])
87
+ on(error: error)
88
+ return
89
+ }
90
+
74
91
  guard let authToken = credentials.value(forKey: "authToken") as? String,
75
92
  let user = credentials.value(forKey: "username") as? String
76
93
  else {
@@ -134,7 +151,6 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
134
151
  guard let strongSelf = self else { return }
135
152
  self?.config = nil
136
153
  self?.recentRoleChangeRequest = nil
137
- self?.recentChangeTrackStateRequest = nil
138
154
  self?.hms?.leave({ success, error in
139
155
  if(success){
140
156
  resolve?("")
@@ -146,7 +162,7 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
146
162
  }
147
163
  }
148
164
 
149
- func sendBroadcastMessage(_ data: NSDictionary) {
165
+ func sendBroadcastMessage(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
150
166
  guard let message = data.value(forKey: "message") as? String
151
167
  else {
152
168
  let error = HMSError(id: "108", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
@@ -157,11 +173,20 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
157
173
  let type = data.value(forKey: "type") as? String ?? "chat"
158
174
 
159
175
  DispatchQueue.main.async { [weak self] in
160
- self?.hms?.sendBroadcastMessage(type: type, message: message)
176
+ self?.hms?.sendBroadcastMessage(type: type, message: message, completion: { message, error in
177
+ if (error == nil) {
178
+ resolve?(["success": true, "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]])
179
+ return
180
+ } else {
181
+ self?.delegate?.emitEvent("ON_ERROR", ["event": "ON_ERROR", "error": HmsDecoder.getError(error), "id": self?.id ?? "12345"])
182
+ reject?(error?.message, error?.localizedDescription, nil)
183
+ return
184
+ }
185
+ })
161
186
  }
162
187
  }
163
188
 
164
- func sendGroupMessage(_ data: NSDictionary) {
189
+ func sendGroupMessage(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
165
190
  guard let message = data.value(forKey: "message") as? String,
166
191
  let targetedRoles = data.value(forKey: "roles") as? [String]
167
192
  else {
@@ -173,11 +198,20 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
173
198
  let type = data.value(forKey: "type") as? String ?? "chat"
174
199
  DispatchQueue.main.async { [weak self] in
175
200
  let encodedTargetedRoles = HmsHelper.getRolesFromRoleNames(targetedRoles, roles: self?.hms?.roles)
176
- self?.hms?.sendGroupMessage(type: type, message: message, roles: encodedTargetedRoles)
201
+ self?.hms?.sendGroupMessage(type: type, message: message, roles: encodedTargetedRoles, completion: { message, error in
202
+ if (error == nil) {
203
+ resolve?(["success": true, "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]])
204
+ return
205
+ } else {
206
+ self?.delegate?.emitEvent("ON_ERROR", ["event": "ON_ERROR", "error": HmsDecoder.getError(error), "id": self?.id ?? "12345"])
207
+ reject?(error?.message, error?.localizedDescription, nil)
208
+ return
209
+ }
210
+ })
177
211
  }
178
212
  }
179
213
 
180
- func sendDirectMessage(_ data: NSDictionary) {
214
+ func sendDirectMessage(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
181
215
  guard let message = data.value(forKey: "message") as? String,
182
216
  let peerId = data.value(forKey: "peerId") as? String
183
217
  else {
@@ -188,24 +222,40 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
188
222
 
189
223
  let type = data.value(forKey: "type") as? String ?? "chat"
190
224
  DispatchQueue.main.async { [weak self] in
191
- guard let peer = HmsHelper.getPeerFromPeerId(peerId, remotePeers: self?.hms?.remotePeers) else { return }
192
- self?.hms?.sendDirectMessage(type: type, message: message, peer: peer)
225
+ guard let peer = HmsHelper.getRemotePeerFromPeerId(peerId, remotePeers: self?.hms?.remotePeers) else { return }
226
+ self?.hms?.sendDirectMessage(type: type, message: message, peer: peer, completion: { message, error in
227
+ if (error == nil) {
228
+ resolve?(["success": true, "data": ["sender": message?.sender?.name ?? "", "message": message?.message ?? "", "type": message?.type]])
229
+ return
230
+ } else {
231
+ self?.delegate?.emitEvent("ON_ERROR", ["event": "ON_ERROR", "error": HmsDecoder.getError(error), "id": self?.id ?? "12345"])
232
+ reject?(error?.message, error?.localizedDescription, nil)
233
+ return
234
+ }
235
+ })
193
236
  }
194
237
  }
195
238
 
196
- func acceptRoleChange() {
239
+ func acceptRoleChange(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
197
240
 
198
241
  DispatchQueue.main.async { [weak self] in
199
242
 
200
243
  guard let request = self?.recentRoleChangeRequest else { return }
201
244
 
202
- self?.hms?.accept(changeRole: request)
245
+ self?.hms?.accept(changeRole: request, completion: { success, error in
246
+ if(success) {
247
+ 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)
251
+ }
252
+ })
203
253
 
204
254
  self?.recentRoleChangeRequest = nil
205
255
  }
206
256
  }
207
257
 
208
- func changeRole(_ data: NSDictionary) {
258
+ func changeRole(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
209
259
 
210
260
  guard let peerId = data.value(forKey: "peerId") as? String,
211
261
  let role = data.value(forKey: "role") as? String
@@ -218,15 +268,22 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
218
268
  let force = data.value(forKey: "force") as? Bool ?? false
219
269
 
220
270
  DispatchQueue.main.async { [weak self] in
221
- guard let peer = HmsHelper.getPeerFromPeerId(peerId, remotePeers: self?.hms?.remotePeers),
271
+ guard let peer = HmsHelper.getPeerFromPeerId(peerId, remotePeers: self?.hms?.remotePeers, localPeer:self?.hms?.localPeer),
222
272
  let role = HmsHelper.getRoleFromRoleName(role, roles: self?.hms?.roles)
223
273
  else { return }
224
-
225
- self?.hms?.changeRole(for: peer, to: role, force: force)
274
+
275
+ self?.hms?.changeRole(for: peer, to: role, force: force, completion: { success, error in
276
+ if(success) {
277
+ 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)
281
+ }
282
+ })
226
283
  }
227
284
  }
228
285
 
229
- func changeTrackState(_ data: NSDictionary) {
286
+ func changeTrackState(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
230
287
 
231
288
  guard let trackId = data.value(forKey: "trackId") as? String
232
289
  else {
@@ -242,31 +299,48 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
242
299
  let track = HmsHelper.getTrackFromTrackId(trackId, remotePeers)
243
300
  else { return }
244
301
 
245
- self?.hms?.changeTrackState(for: track, mute: mute)
302
+ self?.hms?.changeTrackState(for: track, mute: mute, completion: { success, error in
303
+ if(success) {
304
+ resolve?(["success": true])
305
+ } else{
306
+ self?.delegate?.emitEvent("ON_ERROR", ["event": self?.ON_ERROR ?? "", "error": HmsDecoder.getError(error), "id":self?.id ?? "12345"])
307
+ reject?(error?.message, error?.localizedDescription, nil)
308
+ }
309
+ })
246
310
  }
247
311
  }
248
312
 
249
- func changeTrackStateRoles(_ data: NSDictionary) {
313
+ func changeTrackStateForRoles(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
250
314
 
251
- guard let source = data.value(forKey: "source") as? String,
252
- let targetedRoles = data.value(forKey: "roles") as? [String],
253
- let type = data.value(forKey: "type") as? String
315
+ guard let mute = data.value(forKey: "mute") as? Bool
254
316
  else {
255
317
  let error = HMSError(id: "113", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
256
318
  delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
257
319
  return
258
320
  }
259
- var decodeType: HMSTrackKind;
260
- if( type == "AUDIO") {
261
- decodeType = HMSTrackKind.audio
262
- }else {
263
- decodeType = HMSTrackKind.video
321
+ let source = data.value(forKey: "source") as? String
322
+ let targetedRoles = data.value(forKey: "roles") as? [String]
323
+ let type = data.value(forKey: "type") as? String
324
+
325
+ var decodeType: HMSTrackKind? = nil;
326
+ if( type != nil){
327
+ if( type == "AUDIO") {
328
+ decodeType = HMSTrackKind.audio
329
+ }else {
330
+ decodeType = HMSTrackKind.video
331
+ }
264
332
  }
265
- let mute = data.value(forKey: "mute") as? Bool ?? true
266
333
 
267
334
  DispatchQueue.main.async { [weak self] in
268
335
  let encodedTargetedRoles = HmsHelper.getRolesFromRoleNames(targetedRoles, roles: self?.hms?.roles)
269
- self?.hms?.changeTrackState(mute: mute, for: decodeType, source: source, roles: encodedTargetedRoles)
336
+ self?.hms?.changeTrackState(mute: mute, for: decodeType, source: source, roles: encodedTargetedRoles, completion: { success, error in
337
+ if(success) {
338
+ 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)
342
+ }
343
+ })
270
344
  }
271
345
  }
272
346
 
@@ -301,7 +375,7 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
301
375
  }
302
376
  }
303
377
 
304
- func removePeer(_ data: NSDictionary) {
378
+ func removePeer(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
305
379
 
306
380
  guard let peerId = data.value(forKey: "peerId") as? String
307
381
  else {
@@ -315,15 +389,22 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
315
389
  DispatchQueue.main.async { [weak self] in
316
390
 
317
391
  guard let remotePeers = self?.hms?.remotePeers,
318
- let peer = HmsHelper.getPeerFromPeerId(peerId, remotePeers: remotePeers)
392
+ let peer = HmsHelper.getRemotePeerFromPeerId(peerId, remotePeers: remotePeers)
319
393
  else { return }
320
394
 
321
- self?.hms?.removePeer(peer, reason: reason ?? "Removed from room")
395
+ self?.hms?.removePeer(peer, reason: reason ?? "Removed from room", completion: { success, error in
396
+ if(success) {
397
+ 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)
401
+ }
402
+ })
322
403
  }
323
404
  }
324
405
 
325
406
 
326
- func endRoom(_ data: NSDictionary) {
407
+ func endRoom(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
327
408
 
328
409
  guard let lock = data.value(forKey: "lock") as? Bool,
329
410
  let reason = data.value(forKey: "reason") as? String
@@ -334,7 +415,14 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
334
415
  }
335
416
 
336
417
  DispatchQueue.main.async { [weak self] in
337
- self?.hms?.endRoom(lock: lock ?? false, reason: reason ?? "Room was ended")
418
+ self?.hms?.endRoom(lock: lock, reason: reason, completion: { success, error in
419
+ if(success) {
420
+ 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)
424
+ }
425
+ })
338
426
  }
339
427
  }
340
428
 
@@ -512,6 +600,54 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
512
600
  })
513
601
  }
514
602
 
603
+ func startHLSStreaming(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
604
+ guard let meetingURLVariants = data.value(forKey: "meetingURLVariants") as? [[String: Any]]?
605
+ else {
606
+ 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])
608
+ return
609
+ }
610
+
611
+ let hlsMeetingUrlVariant = HmsHelper.getHMSHLSMeetingURLVariants(meetingURLVariants)
612
+ let config = HMSHLSConfig(variants: hlsMeetingUrlVariant)
613
+
614
+ hms?.startHLSStreaming(config: config, completion: { success, error in
615
+ if (success) {
616
+ let roomData = HmsDecoder.getHmsRoom(self.hms?.room)
617
+ let type = self.getString(from: HMSRoomUpdate.hlsStreamingStateUpdated)
618
+
619
+ let localPeerData = HmsDecoder.getHmsLocalPeer(self.hms?.localPeer)
620
+ let remotePeerData = HmsDecoder.getHmsRemotePeers(self.hms?.remotePeers)
621
+ self.delegate?.emitEvent(self.ON_ROOM_UPDATE, ["event": self.ON_ROOM_UPDATE, "id": self.id, "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
622
+ resolve?(["success": success])
623
+ return
624
+ } else {
625
+ self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id":self.id])
626
+ reject?(error?.message, error?.localizedDescription, nil)
627
+ return
628
+ }
629
+ })
630
+ }
631
+
632
+ func stopHLSStreaming(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
633
+ hms?.stopHLSStreaming(config: nil, completion: { success, error in
634
+ if (success) {
635
+ let roomData = HmsDecoder.getHmsRoom(self.hms?.room)
636
+ let type = self.getString(from: HMSRoomUpdate.browserRecordingStateUpdated)
637
+
638
+ let localPeerData = HmsDecoder.getHmsLocalPeer(self.hms?.localPeer)
639
+ let remotePeerData = HmsDecoder.getHmsRemotePeers(self.hms?.remotePeers)
640
+ self.delegate?.emitEvent(self.ON_ROOM_UPDATE, ["event": self.ON_ROOM_UPDATE, "id": self.id, "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
641
+ resolve?(["success": success])
642
+ return
643
+ } else {
644
+ self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id":self.id])
645
+ reject?(error?.message, error?.localizedDescription, nil)
646
+ return
647
+ }
648
+ })
649
+ }
650
+
515
651
  //TODO: to be implemented after volume is exposed for iOS
516
652
  // func getVolume(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
517
653
  // guard let trackId = data.value(forKey: "trackId") as? String
@@ -548,7 +684,7 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
548
684
 
549
685
  let decodedRoles = HmsDecoder.getAllRoles(hms?.roles)
550
686
 
551
- self.delegate?.emitEvent(ON_JOIN, ["event": ON_JOIN, "id": self.id ?? "", "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData, "roles": decodedRoles])
687
+ self.delegate?.emitEvent(ON_JOIN, ["event": ON_JOIN, "id": self.id , "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData, "roles": decodedRoles])
552
688
  }
553
689
 
554
690
  func onPreview(room: HMSRoom, localTracks: [HMSTrack]) {
@@ -556,7 +692,8 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
556
692
  let hmsRoom = HmsDecoder.getHmsRoom(room)
557
693
  let localPeerData = HmsDecoder.getHmsLocalPeer(hms?.localPeer)
558
694
 
559
- self.delegate?.emitEvent(ON_PREVIEW, ["event": ON_PREVIEW, "id": self.id ?? "", "room": hmsRoom, "previewTracks": previewTracks, "localPeer": localPeerData])
695
+ previewInProgress = false
696
+ self.delegate?.emitEvent(ON_PREVIEW, ["event": ON_PREVIEW, "id": self.id , "room": hmsRoom, "previewTracks": previewTracks, "localPeer": localPeerData])
560
697
  }
561
698
 
562
699
  func on(room: HMSRoom, update: HMSRoomUpdate) {
@@ -567,7 +704,7 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
567
704
  let localPeerData = HmsDecoder.getHmsLocalPeer(hms?.localPeer)
568
705
  let remotePeerData = HmsDecoder.getHmsRemotePeers(hms?.remotePeers)
569
706
 
570
- self.delegate?.emitEvent(ON_ROOM_UPDATE, ["event": ON_ROOM_UPDATE, "id": self.id ?? "", "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
707
+ self.delegate?.emitEvent(ON_ROOM_UPDATE, ["event": ON_ROOM_UPDATE, "id": self.id , "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
571
708
  }
572
709
 
573
710
  func on(peer: HMSPeer, update: HMSPeerUpdate) {
@@ -577,8 +714,9 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
577
714
 
578
715
  let localPeerData = HmsDecoder.getHmsLocalPeer(hms?.localPeer)
579
716
  let remotePeerData = HmsDecoder.getHmsRemotePeers(hms?.remotePeers)
717
+ let hmsPeer = HmsDecoder.getHmsPeer(peer)
580
718
 
581
- self.delegate?.emitEvent(ON_PEER_UPDATE, ["event": ON_PEER_UPDATE, "id": self.id ?? "", "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
719
+ self.delegate?.emitEvent(ON_PEER_UPDATE, ["event": ON_PEER_UPDATE, "id": self.id, "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData, "peer": hmsPeer])
582
720
  }
583
721
 
584
722
  func on(track: HMSTrack, update: HMSTrackUpdate, for peer: HMSPeer) {
@@ -588,16 +726,19 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
588
726
 
589
727
  let localPeerData = HmsDecoder.getHmsLocalPeer(hms?.localPeer)
590
728
  let remotePeerData = HmsDecoder.getHmsRemotePeers(hms?.remotePeers)
729
+ let hmsPeer = HmsDecoder.getHmsPeer(peer)
730
+ let hmsTrack = HmsDecoder.getHmsTrack(track)
591
731
 
592
- self.delegate?.emitEvent(ON_TRACK_UPDATE, ["event": ON_TRACK_UPDATE, "id": self.id ?? "", "room": roomData, "type": type, "localPeer": localPeerData, "remotePeers": remotePeerData])
732
+ 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])
593
733
  }
594
734
 
595
735
  func on(error: HMSError) {
736
+ if (previewInProgress) { previewInProgress = false }
596
737
  self.delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
597
738
  }
598
739
 
599
740
  func on(message: HMSMessage) {
600
- self.delegate?.emitEvent(ON_MESSAGE, ["event": ON_MESSAGE, "id": self.id ?? "", "sender": message.sender?.name ?? "", "time": message.time, "message": message.message, "type": message.type])
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])
601
742
  }
602
743
 
603
744
  func on(updated speakers: [HMSSpeaker]) {
@@ -605,15 +746,15 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
605
746
  for speaker in speakers {
606
747
  speakerPeerIds.append(["peer": HmsDecoder.getHmsPeer(speaker.peer), "level": speaker.level, "track": HmsDecoder.getHmsTrack(speaker.track)])
607
748
  }
608
- self.delegate?.emitEvent(ON_SPEAKER, ["event": ON_SPEAKER, "id": self.id ?? "", "count": speakers.count, "peers" :speakerPeerIds])
749
+ self.delegate?.emitEvent(ON_SPEAKER, ["event": ON_SPEAKER, "id": self.id , "count": speakers.count, "peers" :speakerPeerIds])
609
750
  }
610
751
 
611
752
  func onReconnecting() {
612
- self.delegate?.emitEvent(RECONNECTING, ["event": RECONNECTING, "id": self.id ?? ""])
753
+ self.delegate?.emitEvent(RECONNECTING, ["event": RECONNECTING, "id": self.id ])
613
754
  }
614
755
 
615
756
  func onReconnected() {
616
- self.delegate?.emitEvent(RECONNECTED, ["event": RECONNECTED, "id": self.id ?? ""])
757
+ self.delegate?.emitEvent(RECONNECTED, ["event": RECONNECTED, "id": self.id ])
617
758
  }
618
759
 
619
760
  func on(roleChangeRequest: HMSRoleChangeRequest) {
@@ -623,7 +764,8 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
623
764
  }
624
765
 
625
766
  func on(changeTrackStateRequest: HMSChangeTrackStateRequest) {
626
- // On track state change required
767
+ let decodedChangeTrackStateRequest = HmsDecoder.getHmsChangeTrackStateRequest(changeTrackStateRequest, id)
768
+ delegate?.emitEvent("ON_CHANGE_TRACK_STATE_REQUEST", decodedChangeTrackStateRequest)
627
769
  }
628
770
 
629
771
  func on(removedFromRoom notification: HMSRemovedFromRoomNotification) {
@@ -705,6 +847,8 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
705
847
  return "META_DATA_CHANGED"
706
848
  case .browserRecordingStateUpdated:
707
849
  return "BROWSER_RECORDING_STATE_UPDATED"
850
+ case .hlsStreamingStateUpdated:
851
+ return "HLS_STREAMING_STATE_UPDATED"
708
852
  case .rtmpStreamingStateUpdated:
709
853
  return "RTMP_STREAMING_STATE_UPDATED"
710
854
  case.serverRecordingStateUpdated:
@@ -714,3 +858,9 @@ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
714
858
  }
715
859
  }
716
860
  }
861
+
862
+ //extension HmsSDK: HMSLogger {
863
+ // func log(_ message: String, _ level: HMSLogLevel) {
864
+ //
865
+ // }
866
+ //}
package/ios/HmsView.swift CHANGED
@@ -30,7 +30,6 @@ class HmssdkDisplayView: UIView {
30
30
  }()
31
31
 
32
32
  var hmsCollection: [String: HmsSDK] = [:]
33
- var localTrack: String?
34
33
  var sinked = false
35
34
  var sinkVideo = true
36
35
 
@@ -58,66 +57,31 @@ class HmssdkDisplayView: UIView {
58
57
 
59
58
  @objc var data: NSDictionary = [:] {
60
59
  didSet {
61
- guard let trackID = data.value(forKey: "trackId") as? String,
60
+
61
+ let sdkID = data.value(forKey: "id") as? String ?? "12345"
62
+
63
+ guard let hmsSDK = hmsCollection[sdkID]?.hms,
64
+ let trackID = data.value(forKey: "trackId") as? String,
65
+ let videoTrack = HMSUtilities.getVideoTrack(for: trackID, in: hmsSDK.room!),
62
66
  let sink = data.value(forKey: "sink") as? Bool
63
- else { return }
67
+ else {
68
+ print(#function, "Required data to setup video view not found")
69
+ return
70
+ }
64
71
 
65
72
  sinkVideo = sink
66
- localTrack = trackID
73
+
67
74
  let mirror = data.value(forKey: "mirror") as? Bool
68
- if(mirror != nil){
75
+ if (mirror != nil) {
69
76
  videoView.mirror = mirror!
70
77
  }
71
78
 
72
- var id : String = "12345"
73
-
74
- if let sdkId = data.value(forKey: "id") as? String {
75
- id = sdkId
76
- }
77
-
78
- if let videoTrack: HMSVideoTrack = hmsCollection[id]?.hms?.localPeer?.videoTrack {
79
- if videoTrack.trackId == trackID {
80
-
81
- if !sinked && sinkVideo {
82
- videoView.setVideoTrack(videoTrack)
83
- sinked = true
84
- } else if !sinkVideo {
85
- videoView.setVideoTrack(nil)
86
- sinked = false
87
- }
88
- return
89
- }
90
- }
91
-
92
- if let remotePeers: [HMSRemotePeer] = hmsCollection[id]?.hms?.remotePeers {
93
- for peer in remotePeers where peer.videoTrack?.trackId == trackID {
94
-
95
- if !sinked && sinkVideo {
96
- videoView.setVideoTrack(peer.videoTrack)
97
- sinked = true
98
- } else if !sinkVideo {
99
- videoView.setVideoTrack(nil)
100
- sinked = false
101
- }
102
- return
103
- }
104
- for peer in remotePeers {
105
- let auxTracks = peer.auxiliaryTracks
106
- if let auxTracksVals = auxTracks {
107
- for track in auxTracksVals where track.trackId == trackID {
108
- if (HmsHelper.getHmsTrackType(track.kind) == "VIDEO") {
109
- if !sinked && sinkVideo {
110
- videoView.setVideoTrack(track as? HMSVideoTrack)
111
- sinked = true
112
- } else if !sinkVideo {
113
- videoView.setVideoTrack(nil)
114
- sinked = false
115
- }
116
- return
117
- }
118
- }
119
- }
120
- }
79
+ if !sinked && sinkVideo {
80
+ videoView.setVideoTrack(videoTrack)
81
+ sinked = true
82
+ } else if !sinkVideo {
83
+ videoView.setVideoTrack(nil)
84
+ sinked = false
121
85
  }
122
86
  }
123
87
  }
@@ -139,4 +103,8 @@ class HmssdkDisplayView: UIView {
139
103
  required init?(coder: NSCoder) {
140
104
  fatalError("init(coder:) has not been implemented")
141
105
  }
106
+
107
+ deinit {
108
+ videoView.setVideoTrack(nil)
109
+ }
142
110
  }