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