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

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 (196) hide show
  1. package/README.md +37 -39
  2. package/android/.gradle/checksums/checksums.lock +0 -0
  3. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  4. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  5. package/android/.project +34 -0
  6. package/android/build.gradle +1 -1
  7. package/android/src/main/java/com/reactnativehmssdk/HmsDecoder.kt +129 -29
  8. package/android/src/main/java/com/reactnativehmssdk/HmsHelper.kt +124 -2
  9. package/android/src/main/java/com/reactnativehmssdk/HmsModule.kt +138 -495
  10. package/android/src/main/java/com/reactnativehmssdk/HmsSDK.kt +899 -0
  11. package/android/src/main/java/com/reactnativehmssdk/HmsView.kt +26 -8
  12. package/android/src/main/java/com/reactnativehmssdk/HmssdkViewManager.kt +8 -6
  13. package/ios/HmsDecoder.swift +142 -20
  14. package/ios/HmsHelper.swift +110 -0
  15. package/ios/HmsManager.m +13 -7
  16. package/ios/HmsManager.swift +115 -375
  17. package/ios/HmsSDK.swift +716 -0
  18. package/ios/HmsView.swift +16 -8
  19. package/lib/commonjs/classes/HMSAudioTrack.js.map +1 -1
  20. package/lib/commonjs/classes/HMSAudioTrackSettings.js +3 -0
  21. package/lib/commonjs/classes/HMSAudioTrackSettings.js.map +1 -1
  22. package/lib/commonjs/classes/HMSBrowserRecordingState.js +23 -0
  23. package/lib/commonjs/classes/HMSBrowserRecordingState.js.map +1 -0
  24. package/lib/commonjs/classes/HMSCameraFacing.js +14 -0
  25. package/lib/commonjs/classes/HMSCameraFacing.js.map +1 -0
  26. package/lib/commonjs/classes/HMSConfig.js +3 -7
  27. package/lib/commonjs/classes/HMSConfig.js.map +1 -1
  28. package/lib/commonjs/classes/HMSEncoder.js +60 -32
  29. package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
  30. package/lib/commonjs/classes/HMSException.js +30 -0
  31. package/lib/commonjs/classes/HMSException.js.map +1 -0
  32. package/lib/commonjs/classes/HMSHelper.js +2 -2
  33. package/lib/commonjs/classes/HMSHelper.js.map +1 -1
  34. package/lib/commonjs/classes/HMSLocalAudioTrack.js +19 -1
  35. package/lib/commonjs/classes/HMSLocalAudioTrack.js.map +1 -1
  36. package/lib/commonjs/classes/HMSLocalPeer.js.map +1 -1
  37. package/lib/commonjs/classes/HMSLocalVideoTrack.js +10 -2
  38. package/lib/commonjs/classes/HMSLocalVideoTrack.js.map +1 -1
  39. package/lib/commonjs/classes/HMSLogger.js.map +1 -1
  40. package/lib/commonjs/classes/HMSPeer.js +3 -0
  41. package/lib/commonjs/classes/HMSPeer.js.map +1 -1
  42. package/lib/commonjs/classes/HMSPeerUpdate.js +1 -0
  43. package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
  44. package/lib/commonjs/classes/HMSPermissions.js +7 -7
  45. package/lib/commonjs/classes/HMSPermissions.js.map +1 -1
  46. package/lib/commonjs/classes/HMSRTMPConfig.js +26 -0
  47. package/lib/commonjs/classes/HMSRTMPConfig.js.map +1 -0
  48. package/lib/commonjs/classes/HMSRemoteAudioTrack.js +2 -0
  49. package/lib/commonjs/classes/HMSRemoteAudioTrack.js.map +1 -1
  50. package/lib/commonjs/classes/HMSRemotePeer.js.map +1 -1
  51. package/lib/commonjs/classes/HMSRemoteVideoTrack.js +2 -0
  52. package/lib/commonjs/classes/HMSRemoteVideoTrack.js.map +1 -1
  53. package/lib/commonjs/classes/HMSRoom.js +9 -0
  54. package/lib/commonjs/classes/HMSRoom.js.map +1 -1
  55. package/lib/commonjs/classes/HMSRtmpStreamingState.js +23 -0
  56. package/lib/commonjs/classes/HMSRtmpStreamingState.js.map +1 -0
  57. package/lib/commonjs/classes/HMSSDK.js +336 -109
  58. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  59. package/lib/commonjs/classes/HMSServerRecordingState.js +23 -0
  60. package/lib/commonjs/classes/HMSServerRecordingState.js.map +1 -0
  61. package/lib/commonjs/classes/HMSTrack.js +8 -18
  62. package/lib/commonjs/classes/HMSTrack.js.map +1 -1
  63. package/lib/commonjs/classes/HMSTrackType.js +14 -0
  64. package/lib/commonjs/classes/HMSTrackType.js.map +1 -0
  65. package/lib/commonjs/classes/HMSVideoResolution.js +23 -0
  66. package/lib/commonjs/classes/HMSVideoResolution.js.map +1 -0
  67. package/lib/commonjs/classes/HMSVideoSettings.js.map +1 -1
  68. package/lib/commonjs/classes/HMSVideoTrack.js +2 -0
  69. package/lib/commonjs/classes/HMSVideoTrack.js.map +1 -1
  70. package/lib/commonjs/classes/HMSVideoTrackSettings.js +0 -3
  71. package/lib/commonjs/classes/HMSVideoTrackSettings.js.map +1 -1
  72. package/lib/commonjs/classes/HmsView.js +10 -7
  73. package/lib/commonjs/classes/HmsView.js.map +1 -1
  74. package/lib/commonjs/index.js +98 -0
  75. package/lib/commonjs/index.js.map +1 -1
  76. package/lib/module/classes/HMSAudioTrack.js.map +1 -1
  77. package/lib/module/classes/HMSAudioTrackSettings.js +3 -0
  78. package/lib/module/classes/HMSAudioTrackSettings.js.map +1 -1
  79. package/lib/module/classes/HMSBrowserRecordingState.js +14 -0
  80. package/lib/module/classes/HMSBrowserRecordingState.js.map +1 -0
  81. package/lib/module/classes/HMSCameraFacing.js +7 -0
  82. package/lib/module/classes/HMSCameraFacing.js.map +1 -0
  83. package/lib/module/classes/HMSConfig.js +3 -7
  84. package/lib/module/classes/HMSConfig.js.map +1 -1
  85. package/lib/module/classes/HMSEncoder.js +59 -32
  86. package/lib/module/classes/HMSEncoder.js.map +1 -1
  87. package/lib/module/classes/HMSException.js +21 -0
  88. package/lib/module/classes/HMSException.js.map +1 -0
  89. package/lib/module/classes/HMSHelper.js +2 -2
  90. package/lib/module/classes/HMSHelper.js.map +1 -1
  91. package/lib/module/classes/HMSLocalAudioTrack.js +20 -2
  92. package/lib/module/classes/HMSLocalAudioTrack.js.map +1 -1
  93. package/lib/module/classes/HMSLocalPeer.js.map +1 -1
  94. package/lib/module/classes/HMSLocalVideoTrack.js +10 -2
  95. package/lib/module/classes/HMSLocalVideoTrack.js.map +1 -1
  96. package/lib/module/classes/HMSLogger.js.map +1 -1
  97. package/lib/module/classes/HMSPeer.js +3 -0
  98. package/lib/module/classes/HMSPeer.js.map +1 -1
  99. package/lib/module/classes/HMSPeerUpdate.js +1 -0
  100. package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
  101. package/lib/module/classes/HMSPermissions.js +7 -7
  102. package/lib/module/classes/HMSPermissions.js.map +1 -1
  103. package/lib/module/classes/HMSRTMPConfig.js +17 -0
  104. package/lib/module/classes/HMSRTMPConfig.js.map +1 -0
  105. package/lib/module/classes/HMSRemoteAudioTrack.js +2 -0
  106. package/lib/module/classes/HMSRemoteAudioTrack.js.map +1 -1
  107. package/lib/module/classes/HMSRemotePeer.js.map +1 -1
  108. package/lib/module/classes/HMSRemoteVideoTrack.js +2 -0
  109. package/lib/module/classes/HMSRemoteVideoTrack.js.map +1 -1
  110. package/lib/module/classes/HMSRoom.js +9 -0
  111. package/lib/module/classes/HMSRoom.js.map +1 -1
  112. package/lib/module/classes/HMSRtmpStreamingState.js +14 -0
  113. package/lib/module/classes/HMSRtmpStreamingState.js.map +1 -0
  114. package/lib/module/classes/HMSSDK.js +328 -109
  115. package/lib/module/classes/HMSSDK.js.map +1 -1
  116. package/lib/module/classes/HMSServerRecordingState.js +14 -0
  117. package/lib/module/classes/HMSServerRecordingState.js.map +1 -0
  118. package/lib/module/classes/HMSTrack.js +8 -16
  119. package/lib/module/classes/HMSTrack.js.map +1 -1
  120. package/lib/module/classes/HMSTrackType.js +7 -0
  121. package/lib/module/classes/HMSTrackType.js.map +1 -0
  122. package/lib/module/classes/HMSVideoResolution.js +14 -0
  123. package/lib/module/classes/HMSVideoResolution.js.map +1 -0
  124. package/lib/module/classes/HMSVideoSettings.js.map +1 -1
  125. package/lib/module/classes/HMSVideoTrack.js +2 -0
  126. package/lib/module/classes/HMSVideoTrack.js.map +1 -1
  127. package/lib/module/classes/HMSVideoTrackSettings.js +0 -3
  128. package/lib/module/classes/HMSVideoTrackSettings.js.map +1 -1
  129. package/lib/module/classes/HmsView.js +10 -7
  130. package/lib/module/classes/HmsView.js.map +1 -1
  131. package/lib/module/index.js +7 -0
  132. package/lib/module/index.js.map +1 -1
  133. package/lib/typescript/classes/HMSAudioTrack.d.ts +3 -0
  134. package/lib/typescript/classes/HMSAudioTrackSettings.d.ts +3 -0
  135. package/lib/typescript/classes/HMSBrowserRecordingState.d.ts +9 -0
  136. package/lib/typescript/classes/HMSCameraFacing.d.ts +4 -0
  137. package/lib/typescript/classes/HMSConfig.d.ts +2 -4
  138. package/lib/typescript/classes/HMSEncoder.d.ts +14 -12
  139. package/lib/typescript/classes/HMSException.d.ts +22 -0
  140. package/lib/typescript/classes/HMSLocalAudioTrack.d.ts +5 -0
  141. package/lib/typescript/classes/HMSLocalPeer.d.ts +3 -0
  142. package/lib/typescript/classes/HMSLocalVideoTrack.d.ts +4 -0
  143. package/lib/typescript/classes/HMSLogger.d.ts +4 -4
  144. package/lib/typescript/classes/HMSPeer.d.ts +2 -0
  145. package/lib/typescript/classes/HMSPeerUpdate.d.ts +1 -0
  146. package/lib/typescript/classes/HMSPermissions.d.ts +6 -6
  147. package/lib/typescript/classes/HMSRTMPConfig.d.ts +10 -0
  148. package/lib/typescript/classes/HMSRemoteAudioTrack.d.ts +4 -0
  149. package/lib/typescript/classes/HMSRemotePeer.d.ts +3 -0
  150. package/lib/typescript/classes/HMSRemoteVideoTrack.d.ts +4 -0
  151. package/lib/typescript/classes/HMSRoom.d.ts +9 -0
  152. package/lib/typescript/classes/HMSRtmpStreamingState.d.ts +9 -0
  153. package/lib/typescript/classes/HMSSDK.d.ts +36 -6
  154. package/lib/typescript/classes/HMSServerRecordingState.d.ts +9 -0
  155. package/lib/typescript/classes/HMSTrack.d.ts +6 -1
  156. package/lib/typescript/classes/HMSTrackType.d.ts +4 -0
  157. package/lib/typescript/classes/HMSVideoResolution.d.ts +8 -0
  158. package/lib/typescript/classes/HMSVideoSettings.d.ts +3 -3
  159. package/lib/typescript/classes/HMSVideoTrack.d.ts +5 -1
  160. package/lib/typescript/classes/HMSVideoTrackSettings.d.ts +13 -10
  161. package/lib/typescript/classes/HmsView.d.ts +2 -1
  162. package/lib/typescript/index.d.ts +7 -0
  163. package/package.json +1 -1
  164. package/src/classes/HMSAudioTrack.ts +3 -0
  165. package/src/classes/HMSAudioTrackSettings.ts +9 -1
  166. package/src/classes/HMSBrowserRecordingState.ts +11 -0
  167. package/src/classes/HMSCameraFacing.ts +4 -0
  168. package/src/classes/HMSConfig.ts +3 -7
  169. package/src/classes/HMSEncoder.ts +62 -28
  170. package/src/classes/HMSException.ts +33 -0
  171. package/src/classes/HMSHelper.ts +2 -2
  172. package/src/classes/HMSLocalAudioTrack.ts +19 -2
  173. package/src/classes/HMSLocalPeer.ts +3 -0
  174. package/src/classes/HMSLocalVideoTrack.ts +7 -2
  175. package/src/classes/HMSLogger.ts +5 -5
  176. package/src/classes/HMSPeer.ts +3 -0
  177. package/src/classes/HMSPeerUpdate.ts +1 -0
  178. package/src/classes/HMSPermissions.ts +9 -9
  179. package/src/classes/HMSRTMPConfig.ts +15 -0
  180. package/src/classes/HMSRemoteAudioTrack.ts +13 -2
  181. package/src/classes/HMSRemotePeer.ts +3 -0
  182. package/src/classes/HMSRemoteVideoTrack.ts +13 -2
  183. package/src/classes/HMSRoom.ts +12 -0
  184. package/src/classes/HMSRtmpStreamingState.ts +11 -0
  185. package/src/classes/{HMSSDK.ts → HMSSDK.tsx} +284 -42
  186. package/src/classes/HMSServerRecordingState.ts +11 -0
  187. package/src/classes/HMSTrack.ts +9 -15
  188. package/src/classes/HMSTrackType.ts +4 -0
  189. package/src/classes/HMSVideoResolution.ts +9 -0
  190. package/src/classes/HMSVideoSettings.ts +3 -3
  191. package/src/classes/HMSVideoTrack.ts +6 -1
  192. package/src/classes/HMSVideoTrackSettings.ts +13 -10
  193. package/src/classes/HmsView.tsx +4 -0
  194. package/src/index.ts +7 -0
  195. package/ios/Hmssdk.m +0 -8
  196. package/ios/Hmssdk.swift +0 -8
@@ -0,0 +1,716 @@
1
+ //
2
+ // Hmssdk.swift
3
+ // Hmssdk
4
+ //
5
+ // Copyright © 2021 Facebook. All rights reserved.
6
+ //
7
+
8
+ import Foundation
9
+ import HMSSDK
10
+ class HmsSDK: HMSUpdateListener, HMSPreviewListener {
11
+
12
+ var hms: HMSSDK?
13
+ var config: HMSConfig?
14
+ var recentRoleChangeRequest: HMSRoleChangeRequest?
15
+ var recentChangeTrackStateRequest: HMSChangeTrackStateRequest?
16
+ var delegate: HmsManager?
17
+ var id: String = "12345"
18
+
19
+ let ON_PREVIEW = "ON_PREVIEW"
20
+ let ON_JOIN = "ON_JOIN"
21
+ let ON_ROOM_UPDATE = "ON_ROOM_UPDATE"
22
+ let ON_PEER_UPDATE = "ON_PEER_UPDATE"
23
+ let ON_TRACK_UPDATE = "ON_TRACK_UPDATE"
24
+ let ON_ROLE_CHANGE_REQUEST = "ON_ROLE_CHANGE_REQUEST"
25
+ let ON_REMOVED_FROM_ROOM = "ON_REMOVED_FROM_ROOM"
26
+ let ON_ERROR = "ON_ERROR"
27
+ let ON_MESSAGE = "ON_MESSAGE"
28
+ let ON_SPEAKER = "ON_SPEAKER"
29
+ let RECONNECTING = "RECONNECTING"
30
+ let RECONNECTED = "RECONNECTED"
31
+
32
+ // MARK: - Setup
33
+
34
+ init(data: NSDictionary?, delegate manager: HmsManager?, uid id: String) {
35
+ let videoSettings = HmsHelper.getLocalVideoSettings(data?.value(forKey: "video") as? NSDictionary)
36
+ let audioSettings = HmsHelper.getLocalAudioSettings(data?.value(forKey: "audio") as? NSDictionary)
37
+ DispatchQueue.main.async { [weak self] in
38
+ let hmsTrackSettings = HMSTrackSettings(videoSettings: videoSettings, audioSettings: audioSettings)
39
+ self?.hms = HMSSDK.build { sdk in
40
+ sdk.trackSettings = hmsTrackSettings
41
+ }
42
+ }
43
+ self.delegate = manager
44
+ self.id = id
45
+ }
46
+
47
+ // MARK: - HMS SDK Actions
48
+
49
+ func preview(_ credentials: NSDictionary) {
50
+
51
+ guard let authToken = credentials.value(forKey: "authToken") as? String,
52
+ let user = credentials.value(forKey: "username") as? String
53
+ else {
54
+ let error = HMSError(id: "101", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
55
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
56
+ return
57
+ }
58
+
59
+ let metadata = credentials.value(forKey: "metadata") as? String
60
+ DispatchQueue.main.async { [weak self] in
61
+ guard let strongSelf = self else { return }
62
+ if let endpoint = credentials.value(forKey: "endpoint") as? String {
63
+ strongSelf.config = HMSConfig(userName: user, authToken: authToken, metadata: metadata, endpoint: endpoint)
64
+ strongSelf.hms?.preview(config: strongSelf.config!, delegate: strongSelf)
65
+ } else {
66
+ strongSelf.config = HMSConfig(userName: user, authToken: authToken, metadata: metadata)
67
+ strongSelf.hms?.preview(config: strongSelf.config!, delegate: strongSelf)
68
+ }
69
+ }
70
+ }
71
+
72
+ func join(_ credentials: NSDictionary) {
73
+
74
+ guard let authToken = credentials.value(forKey: "authToken") as? String,
75
+ let user = credentials.value(forKey: "username") as? String
76
+ else {
77
+ let error = HMSError(id: "102", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
78
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
79
+ return
80
+ }
81
+
82
+ let metadata = credentials.value(forKey: "metadata") as? String
83
+
84
+ DispatchQueue.main.async { [weak self] in
85
+ guard let strongSelf = self else { return }
86
+ if let config = strongSelf.config {
87
+ strongSelf.hms?.join(config: config, delegate: strongSelf)
88
+ } else {
89
+ if let endpoint = credentials.value(forKey: "endpoint") as? String {
90
+ strongSelf.config = HMSConfig(userName: user, authToken: authToken, metadata: metadata, endpoint: endpoint)
91
+ strongSelf.hms?.join(config: strongSelf.config!, delegate: strongSelf)
92
+ } else {
93
+ strongSelf.config = HMSConfig(userName: user, authToken: authToken, metadata: metadata)
94
+ strongSelf.hms?.join(config: strongSelf.config!, delegate: strongSelf)
95
+ }
96
+ }
97
+ }
98
+ }
99
+
100
+ func setLocalMute(_ data: NSDictionary) {
101
+ guard let isMute = data.value(forKey: "isMute") as? Bool
102
+ else {
103
+ let error = HMSError(id: "106", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
104
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
105
+ return
106
+ }
107
+
108
+ DispatchQueue.main.async { [weak self] in
109
+ self?.hms?.localPeer?.localAudioTrack()?.setMute(isMute)
110
+ }
111
+ }
112
+
113
+ func setLocalVideoMute(_ data: NSDictionary) {
114
+ guard let isMute = data.value(forKey: "isMute") as? Bool
115
+ else {
116
+ let error = HMSError(id: "107", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
117
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
118
+ return
119
+ }
120
+
121
+ DispatchQueue.main.async { [weak self] in
122
+ self?.hms?.localPeer?.localVideoTrack()?.setMute(isMute)
123
+ }
124
+ }
125
+
126
+ func switchCamera() {
127
+ DispatchQueue.main.async { [weak self] in
128
+ self?.hms?.localPeer?.localVideoTrack()?.switchCamera()
129
+ }
130
+ }
131
+
132
+ func leave(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
133
+ DispatchQueue.main.async { [weak self] in
134
+ guard let strongSelf = self else { return }
135
+ self?.config = nil
136
+ self?.recentRoleChangeRequest = nil
137
+ self?.recentChangeTrackStateRequest = nil
138
+ self?.hms?.leave({ success, error in
139
+ if(success){
140
+ resolve?("")
141
+ }else{
142
+ strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id":strongSelf.id])
143
+ reject?(nil, "error in leave",nil)
144
+ }
145
+ })
146
+ }
147
+ }
148
+
149
+ func sendBroadcastMessage(_ data: NSDictionary) {
150
+ guard let message = data.value(forKey: "message") as? String
151
+ else {
152
+ let error = HMSError(id: "108", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
153
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
154
+ return
155
+ }
156
+
157
+ let type = data.value(forKey: "type") as? String ?? "chat"
158
+
159
+ DispatchQueue.main.async { [weak self] in
160
+ self?.hms?.sendBroadcastMessage(type: type, message: message)
161
+ }
162
+ }
163
+
164
+ func sendGroupMessage(_ data: NSDictionary) {
165
+ guard let message = data.value(forKey: "message") as? String,
166
+ let targetedRoles = data.value(forKey: "roles") as? [String]
167
+ else {
168
+ let error = HMSError(id: "109", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
169
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
170
+ return
171
+ }
172
+
173
+ let type = data.value(forKey: "type") as? String ?? "chat"
174
+ DispatchQueue.main.async { [weak self] in
175
+ let encodedTargetedRoles = HmsHelper.getRolesFromRoleNames(targetedRoles, roles: self?.hms?.roles)
176
+ self?.hms?.sendGroupMessage(type: type, message: message, roles: encodedTargetedRoles)
177
+ }
178
+ }
179
+
180
+ func sendDirectMessage(_ data: NSDictionary) {
181
+ guard let message = data.value(forKey: "message") as? String,
182
+ let peerId = data.value(forKey: "peerId") as? String
183
+ else {
184
+ let error = HMSError(id: "110", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
185
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
186
+ return
187
+ }
188
+
189
+ let type = data.value(forKey: "type") as? String ?? "chat"
190
+ 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)
193
+ }
194
+ }
195
+
196
+ func acceptRoleChange() {
197
+
198
+ DispatchQueue.main.async { [weak self] in
199
+
200
+ guard let request = self?.recentRoleChangeRequest else { return }
201
+
202
+ self?.hms?.accept(changeRole: request)
203
+
204
+ self?.recentRoleChangeRequest = nil
205
+ }
206
+ }
207
+
208
+ func changeRole(_ data: NSDictionary) {
209
+
210
+ guard let peerId = data.value(forKey: "peerId") as? String,
211
+ let role = data.value(forKey: "role") as? String
212
+ else {
213
+ let error = HMSError(id: "111", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
214
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
215
+ return
216
+ }
217
+
218
+ let force = data.value(forKey: "force") as? Bool ?? false
219
+
220
+ DispatchQueue.main.async { [weak self] in
221
+ guard let peer = HmsHelper.getPeerFromPeerId(peerId, remotePeers: self?.hms?.remotePeers),
222
+ let role = HmsHelper.getRoleFromRoleName(role, roles: self?.hms?.roles)
223
+ else { return }
224
+
225
+ self?.hms?.changeRole(for: peer, to: role, force: force)
226
+ }
227
+ }
228
+
229
+ func changeTrackState(_ data: NSDictionary) {
230
+
231
+ guard let trackId = data.value(forKey: "trackId") as? String
232
+ else {
233
+ let error = HMSError(id: "112", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
234
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
235
+ return
236
+ }
237
+
238
+ let mute = data.value(forKey: "mute") as? Bool ?? true
239
+
240
+ DispatchQueue.main.async { [weak self] in
241
+ guard let remotePeers = self?.hms?.remotePeers,
242
+ let track = HmsHelper.getTrackFromTrackId(trackId, remotePeers)
243
+ else { return }
244
+
245
+ self?.hms?.changeTrackState(for: track, mute: mute)
246
+ }
247
+ }
248
+
249
+ func changeTrackStateRoles(_ data: NSDictionary) {
250
+
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
254
+ else {
255
+ let error = HMSError(id: "113", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
256
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
257
+ return
258
+ }
259
+ var decodeType: HMSTrackKind;
260
+ if( type == "AUDIO") {
261
+ decodeType = HMSTrackKind.audio
262
+ }else {
263
+ decodeType = HMSTrackKind.video
264
+ }
265
+ let mute = data.value(forKey: "mute") as? Bool ?? true
266
+
267
+ DispatchQueue.main.async { [weak self] in
268
+ let encodedTargetedRoles = HmsHelper.getRolesFromRoleNames(targetedRoles, roles: self?.hms?.roles)
269
+ self?.hms?.changeTrackState(mute: mute, for: decodeType, source: source, roles: encodedTargetedRoles)
270
+ }
271
+ }
272
+
273
+ func isMute(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
274
+ guard let trackId = data.value(forKey: "trackId") as? String
275
+ else {
276
+ reject?(nil, "NO_SDK_ID", nil)
277
+ let error = HMSError(id: "114", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
278
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
279
+ return
280
+ }
281
+
282
+ DispatchQueue.main.async { [weak self] in
283
+ guard let strongSelf = self else { return }
284
+ guard let localPeer = self?.hms?.localPeer,
285
+ let localTrack = HmsHelper.getLocalTrackFromTrackId(trackId, localPeer: localPeer)
286
+ else {
287
+ guard let remotePeers = self?.hms?.remotePeers,
288
+ let track = HmsHelper.getTrackFromTrackId(trackId, remotePeers)
289
+ else {
290
+ let error = HMSError(id: "120", code: HMSErrorCode.genericErrorUnknown, message: "NOT_FOUND")
291
+ strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id":strongSelf.id])
292
+ reject?(nil, "NOT_FOUND", nil)
293
+ return
294
+ }
295
+ let mute = track.isMute()
296
+ resolve?(mute)
297
+ return
298
+ }
299
+ let mute = localTrack.isMute()
300
+ resolve?(mute)
301
+ }
302
+ }
303
+
304
+ func removePeer(_ data: NSDictionary) {
305
+
306
+ guard let peerId = data.value(forKey: "peerId") as? String
307
+ else {
308
+ let error = HMSError(id: "115", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
309
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
310
+ return
311
+ }
312
+
313
+ let reason = data.value(forKey: "reason") as? String
314
+
315
+ DispatchQueue.main.async { [weak self] in
316
+
317
+ guard let remotePeers = self?.hms?.remotePeers,
318
+ let peer = HmsHelper.getPeerFromPeerId(peerId, remotePeers: remotePeers)
319
+ else { return }
320
+
321
+ self?.hms?.removePeer(peer, reason: reason ?? "Removed from room")
322
+ }
323
+ }
324
+
325
+
326
+ func endRoom(_ data: NSDictionary) {
327
+
328
+ guard let lock = data.value(forKey: "lock") as? Bool,
329
+ let reason = data.value(forKey: "reason") as? String
330
+ else {
331
+ let error = HMSError(id: "116", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
332
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
333
+ return
334
+ }
335
+
336
+ DispatchQueue.main.async { [weak self] in
337
+ self?.hms?.endRoom(lock: lock ?? false, reason: reason ?? "Room was ended")
338
+ }
339
+ }
340
+
341
+ func isPlaybackAllowed(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
342
+ guard let trackId = data.value(forKey: "trackId") as? String
343
+ else {
344
+ reject?(nil, "NOT_FOUND", nil)
345
+ let error = HMSError(id: "117", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
346
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
347
+ return
348
+ }
349
+ DispatchQueue.main.async { [weak self] in
350
+ guard let strongSelf = self else { return }
351
+ guard let remotePeers = self?.hms?.remotePeers
352
+ else {
353
+ let error = HMSError(id: "121", code: HMSErrorCode.genericErrorUnknown, message: "NOT_FOUND")
354
+ strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id":strongSelf.id])
355
+ reject?(nil, "NOT_FOUND", nil)
356
+ return
357
+ }
358
+ let remoteAudioTrack = HmsHelper.getRemoteAudioTrackFromTrackId(trackId, remotePeers)
359
+ let remoteVideoTrack = HmsHelper.getRemoteVideoTrackFromTrackId(trackId, remotePeers)
360
+ if (remoteAudioTrack != nil) {
361
+ let isPlaybackAllowed = remoteAudioTrack?.isPlaybackAllowed()
362
+ resolve?(isPlaybackAllowed)
363
+ return
364
+ } else if (remoteVideoTrack != nil) {
365
+ let isPlaybackAllowed = remoteVideoTrack?.isPlaybackAllowed()
366
+ resolve?(isPlaybackAllowed)
367
+ return
368
+ } else {
369
+ let error = HMSError(id: "122", code: HMSErrorCode.genericErrorUnknown, message: "NOT_FOUND")
370
+ strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id":strongSelf.id])
371
+ reject?(nil, "NOT_FOUND",nil)
372
+ return
373
+ }
374
+ }
375
+ }
376
+
377
+ func getRoom(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
378
+ let roomData = HmsDecoder.getHmsRoom(hms?.room)
379
+
380
+ resolve?(roomData)
381
+ }
382
+
383
+ func setPlaybackAllowed(_ data: NSDictionary) {
384
+ guard let trackId = data.value(forKey: "trackId") as? String,
385
+ let playbackAllowed = data.value(forKey: "playbackAllowed") as? Bool
386
+ else {
387
+ let error = HMSError(id: "118", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
388
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
389
+ return
390
+ }
391
+ DispatchQueue.main.async { [weak self] in
392
+ guard let remotePeers = self?.hms?.remotePeers
393
+ else {
394
+ return
395
+ }
396
+ let remoteAudioTrack = HmsHelper.getRemoteAudioTrackFromTrackId(trackId, remotePeers)
397
+ let remoteVideoTrack = HmsHelper.getRemoteVideoTrackFromTrackId(trackId, remotePeers)
398
+ if (remoteAudioTrack != nil) {
399
+ if(playbackAllowed){
400
+ remoteAudioTrack?.setPlaybackAllowed(playbackAllowed)
401
+ }else {
402
+ remoteAudioTrack?.setPlaybackAllowed(playbackAllowed)
403
+ }
404
+ } else if (remoteVideoTrack != nil) {
405
+ remoteVideoTrack?.setPlaybackAllowed(playbackAllowed)
406
+ }
407
+ }
408
+ }
409
+
410
+ func changeMetadata(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
411
+ guard let metadata = data.value(forKey: "metadata") as? String
412
+ else {
413
+ let error = HMSError(id: "123", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
414
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
415
+ reject?(nil, "REQUIRED_KEYS_NOT_FOUND", nil)
416
+ return
417
+ }
418
+
419
+ hms?.change(metadata: metadata, completion: { success, error in
420
+ if (success) {
421
+ resolve?(["success": success])
422
+ return
423
+ } else {
424
+ self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id":self.id])
425
+ reject?(error?.message, error?.localizedDescription, nil)
426
+ return
427
+ }
428
+ })
429
+ }
430
+
431
+ func setVolume(_ data: NSDictionary) {
432
+ guard let trackId = data.value(forKey: "trackId") as? String,
433
+ let volume = data.value(forKey: "volume") as? Double
434
+ else {
435
+ let error = HMSError(id: "124", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
436
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
437
+ return
438
+ }
439
+
440
+ DispatchQueue.main.async { [weak self] in
441
+ guard let strongSelf = self else { return }
442
+ let remotePeers = self?.hms?.remotePeers
443
+
444
+ let remoteAudioTrack = HmsHelper.getRemoteAudioAuxiliaryTrackFromTrackId(trackId, remotePeers)
445
+
446
+ if (remoteAudioTrack != nil) {
447
+ remoteAudioTrack?.setVolume(volume)
448
+ } else {
449
+ let error = HMSError(id: "125", code: HMSErrorCode.genericErrorUnknown, message: "TRACK_ID_NOT_FOUND_IN_REMOTE_TRACKS")
450
+ strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["event": strongSelf.ON_ERROR, "error": HmsDecoder.getError(error), "id":strongSelf.id])
451
+ }
452
+ }
453
+ }
454
+
455
+ func startRTMPOrRecording(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
456
+ guard let record = data.value(forKey: "record") as? Bool
457
+ else {
458
+ let error = HMSError(id: "126", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
459
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
460
+ return
461
+ }
462
+
463
+ let meetingString = data.value(forKey: "meetingURL") as? String
464
+ let rtmpStrings = data.value(forKey: "rtmpURLs") as? [String]
465
+
466
+ var meetingUrl: URL? = nil
467
+ if let meetLink = meetingString {
468
+ meetingUrl = URL(string: meetLink)
469
+ } else {
470
+ let error = HMSError(id: "127", code: HMSErrorCode.genericErrorUnknown, message: "INVALID_MEETING_URL_PASSED")
471
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
472
+ }
473
+
474
+ let URLs = HmsHelper.getRtmpUrls(rtmpStrings)
475
+
476
+
477
+ let config = HMSRTMPConfig(meetingURL: meetingUrl, rtmpURLs: URLs, record: record)
478
+ hms?.startRTMPOrRecording(config: config, completion: { success, error in
479
+ if (success) {
480
+ let roomData = HmsDecoder.getHmsRoom(self.hms?.room)
481
+ let type = self.getString(from: HMSRoomUpdate.browserRecordingStateUpdated)
482
+
483
+ let localPeerData = HmsDecoder.getHmsLocalPeer(self.hms?.localPeer)
484
+ let remotePeerData = HmsDecoder.getHmsRemotePeers(self.hms?.remotePeers)
485
+ self.delegate?.emitEvent(self.ON_ROOM_UPDATE, ["event": self.ON_ROOM_UPDATE, "id": self.id, "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
486
+ resolve?(["success": success])
487
+ return
488
+ } else {
489
+ self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id":self.id])
490
+ reject?(error?.message, error?.localizedDescription, nil)
491
+ return
492
+ }
493
+ })
494
+ }
495
+
496
+ func stopRtmpAndRecording(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
497
+ hms?.stopRTMPAndRecording(completion: { success, error in
498
+ if (success) {
499
+ let roomData = HmsDecoder.getHmsRoom(self.hms?.room)
500
+ let type = self.getString(from: HMSRoomUpdate.browserRecordingStateUpdated)
501
+
502
+ let localPeerData = HmsDecoder.getHmsLocalPeer(self.hms?.localPeer)
503
+ let remotePeerData = HmsDecoder.getHmsRemotePeers(self.hms?.remotePeers)
504
+ self.delegate?.emitEvent(self.ON_ROOM_UPDATE, ["event": self.ON_ROOM_UPDATE, "id": self.id, "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
505
+ resolve?(["success": success])
506
+ return
507
+ } else {
508
+ self.delegate?.emitEvent(self.ON_ERROR, ["event": self.ON_ERROR, "error": HmsDecoder.getError(error), "id":self.id])
509
+ reject?(error?.message, error?.localizedDescription, nil)
510
+ return
511
+ }
512
+ })
513
+ }
514
+
515
+ //TODO: to be implemented after volume is exposed for iOS
516
+ // func getVolume(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
517
+ // guard let trackId = data.value(forKey: "trackId") as? String
518
+ // else {
519
+ // delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": "REQUIRED_KEYS_NOT_FOUND"])
520
+ // reject?(nil, "REQUIRED_KEYS_NOT_FOUND", nil)
521
+ // return
522
+ // }
523
+ //
524
+ //
525
+ // if (localPeer?.localAudioTrack()?.trackId == trackId) {
526
+ //
527
+ // }
528
+ // }
529
+
530
+ // func setLocalVideoSettings(_ data: NSDictionary) {
531
+ // let localVideoTrack = self.hms?.localPeer?.localVideoTrack()
532
+ //
533
+ // guard let settings = HmsHelper.getLocalVideoSettings(data)
534
+ // else {
535
+ // //TODO: throw an error for invalid arguements
536
+ // return
537
+ // }
538
+ // localVideoTrack?.settings = settings
539
+ // }
540
+
541
+ // MARK: - HMS SDK Delegate Callbacks
542
+
543
+ func on(join room: HMSRoom) {
544
+ // Callback from join action
545
+ let roomData = HmsDecoder.getHmsRoom(room)
546
+ let localPeerData = HmsDecoder.getHmsLocalPeer(hms?.localPeer)
547
+ let remotePeerData = HmsDecoder.getHmsRemotePeers(hms?.remotePeers)
548
+
549
+ let decodedRoles = HmsDecoder.getAllRoles(hms?.roles)
550
+
551
+ self.delegate?.emitEvent(ON_JOIN, ["event": ON_JOIN, "id": self.id ?? "", "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData, "roles": decodedRoles])
552
+ }
553
+
554
+ func onPreview(room: HMSRoom, localTracks: [HMSTrack]) {
555
+ let previewTracks = HmsDecoder.getPreviewTracks(localTracks)
556
+ let hmsRoom = HmsDecoder.getHmsRoom(room)
557
+ let localPeerData = HmsDecoder.getHmsLocalPeer(hms?.localPeer)
558
+
559
+ self.delegate?.emitEvent(ON_PREVIEW, ["event": ON_PREVIEW, "id": self.id ?? "", "room": hmsRoom, "previewTracks": previewTracks, "localPeer": localPeerData])
560
+ }
561
+
562
+ func on(room: HMSRoom, update: HMSRoomUpdate) {
563
+ // Listener for any updation in room
564
+ let roomData = HmsDecoder.getHmsRoom(room)
565
+ let type = getString(from: update)
566
+
567
+ let localPeerData = HmsDecoder.getHmsLocalPeer(hms?.localPeer)
568
+ let remotePeerData = HmsDecoder.getHmsRemotePeers(hms?.remotePeers)
569
+
570
+ self.delegate?.emitEvent(ON_ROOM_UPDATE, ["event": ON_ROOM_UPDATE, "id": self.id ?? "", "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
571
+ }
572
+
573
+ func on(peer: HMSPeer, update: HMSPeerUpdate) {
574
+ // Listener for updates in Peers
575
+ let roomData = HmsDecoder.getHmsRoom(hms?.room)
576
+ let type = getString(from: update)
577
+
578
+ let localPeerData = HmsDecoder.getHmsLocalPeer(hms?.localPeer)
579
+ let remotePeerData = HmsDecoder.getHmsRemotePeers(hms?.remotePeers)
580
+
581
+ self.delegate?.emitEvent(ON_PEER_UPDATE, ["event": ON_PEER_UPDATE, "id": self.id ?? "", "type": type, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
582
+ }
583
+
584
+ func on(track: HMSTrack, update: HMSTrackUpdate, for peer: HMSPeer) {
585
+ // Listener for updates in Tracks
586
+ let roomData = HmsDecoder.getHmsRoom(hms?.room)
587
+ let type = getString(from: update)
588
+
589
+ let localPeerData = HmsDecoder.getHmsLocalPeer(hms?.localPeer)
590
+ let remotePeerData = HmsDecoder.getHmsRemotePeers(hms?.remotePeers)
591
+
592
+ self.delegate?.emitEvent(ON_TRACK_UPDATE, ["event": ON_TRACK_UPDATE, "id": self.id ?? "", "room": roomData, "type": type, "localPeer": localPeerData, "remotePeers": remotePeerData])
593
+ }
594
+
595
+ func on(error: HMSError) {
596
+ self.delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
597
+ }
598
+
599
+ 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])
601
+ }
602
+
603
+ func on(updated speakers: [HMSSpeaker]) {
604
+ var speakerPeerIds: [[String : Any]] = []
605
+ for speaker in speakers {
606
+ speakerPeerIds.append(["peer": HmsDecoder.getHmsPeer(speaker.peer), "level": speaker.level, "track": HmsDecoder.getHmsTrack(speaker.track)])
607
+ }
608
+ self.delegate?.emitEvent(ON_SPEAKER, ["event": ON_SPEAKER, "id": self.id ?? "", "count": speakers.count, "peers" :speakerPeerIds])
609
+ }
610
+
611
+ func onReconnecting() {
612
+ self.delegate?.emitEvent(RECONNECTING, ["event": RECONNECTING, "id": self.id ?? ""])
613
+ }
614
+
615
+ func onReconnected() {
616
+ self.delegate?.emitEvent(RECONNECTED, ["event": RECONNECTED, "id": self.id ?? ""])
617
+ }
618
+
619
+ func on(roleChangeRequest: HMSRoleChangeRequest) {
620
+ let decodedRoleChangeRequest = HmsDecoder.getHmsRoleChangeRequest(roleChangeRequest, self.id)
621
+ recentRoleChangeRequest = roleChangeRequest
622
+ self.delegate?.emitEvent(ON_ROLE_CHANGE_REQUEST, decodedRoleChangeRequest)
623
+ }
624
+
625
+ func on(changeTrackStateRequest: HMSChangeTrackStateRequest) {
626
+ // On track state change required
627
+ }
628
+
629
+ func on(removedFromRoom notification: HMSRemovedFromRoomNotification) {
630
+ let requestedBy = notification.requestedBy as HMSPeer?
631
+ var decodedRequestedBy: [String: Any]? = nil
632
+ if let requested = requestedBy {
633
+ decodedRequestedBy = HmsDecoder.getHmsPeer(requested)
634
+ }
635
+ let reason = notification.reason
636
+ let roomEnded = notification.roomEnded
637
+ self.delegate?.emitEvent(ON_REMOVED_FROM_ROOM, ["event": ON_REMOVED_FROM_ROOM, "id": self.id, "requestedBy": decodedRequestedBy as Any, "reason": reason, "roomEnded": roomEnded ])
638
+ }
639
+
640
+
641
+ // MARK: Helper Functions
642
+
643
+ func muteAllPeersAudio(_ data: NSDictionary) {
644
+ guard let mute = data.value(forKey: "mute") as? Bool
645
+ else {
646
+ let error = HMSError(id: "119", code: HMSErrorCode.genericErrorUnknown, message: "REQUIRED_KEYS_NOT_FOUND")
647
+ delegate?.emitEvent(ON_ERROR, ["event": ON_ERROR, "error": HmsDecoder.getError(error), "id":id])
648
+ return
649
+ }
650
+
651
+ DispatchQueue.main.async { [weak self] in
652
+ let remotePeers = self?.hms?.remotePeers
653
+ for peer in remotePeers ?? [] {
654
+ peer.remoteAudioTrack()?.setPlaybackAllowed(!mute)
655
+ }
656
+ }
657
+ let roomData = HmsDecoder.getHmsRoom(hms?.room)
658
+ let localPeerData = HmsDecoder.getHmsLocalPeer(hms?.localPeer)
659
+ let remotePeerData = HmsDecoder.getHmsRemotePeers(hms?.remotePeers)
660
+
661
+ self.delegate?.emitEvent(ON_PEER_UPDATE, ["event": ON_PEER_UPDATE, "room": roomData, "localPeer": localPeerData, "remotePeers": remotePeerData])
662
+ }
663
+
664
+ private func getString(from update: HMSPeerUpdate) -> String {
665
+ switch update {
666
+ case .peerJoined:
667
+ return "PEER_JOINED"
668
+ case .peerLeft:
669
+ return "PEER_LEFT"
670
+ case .roleUpdated:
671
+ return "ROLE_CHANGED"
672
+ case .metadataUpdated:
673
+ return "METADATA_CHANGED"
674
+ default:
675
+ return ""
676
+ }
677
+ }
678
+
679
+ private func getString(from update: HMSTrackUpdate) -> String {
680
+ switch update {
681
+ case .trackAdded:
682
+ return "TRACK_ADDED"
683
+ case .trackRemoved:
684
+ return "TRACK_REMOVED"
685
+ case .trackMuted:
686
+ return "TRACK_MUTED"
687
+ case .trackUnmuted:
688
+ return "TRACK_UNMUTED"
689
+ case .trackDescriptionChanged:
690
+ return "TRACK_DESCRIPTION_CHANGED"
691
+ case .trackDegraded:
692
+ return "TRACK_DEGRADED"
693
+ case .trackRestored:
694
+ return "TRACK_RESTORED"
695
+ default:
696
+ return ""
697
+ }
698
+ }
699
+
700
+ func getString(from update: HMSRoomUpdate) -> String {
701
+ switch update {
702
+ case .roomTypeChanged:
703
+ return "ROOM_TYPE_CHANGED"
704
+ case .metaDataUpdated:
705
+ return "META_DATA_CHANGED"
706
+ case .browserRecordingStateUpdated:
707
+ return "BROWSER_RECORDING_STATE_UPDATED"
708
+ case .rtmpStreamingStateUpdated:
709
+ return "RTMP_STREAMING_STATE_UPDATED"
710
+ case.serverRecordingStateUpdated:
711
+ return "SERVER_RECORDING_STATE_UPDATED"
712
+ default:
713
+ return ""
714
+ }
715
+ }
716
+ }