@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,940 @@
1
+ package com.reactnativehmssdk
2
+
3
+ import com.facebook.react.bridge.*
4
+ import java.util.*
5
+ import kotlinx.coroutines.launch
6
+ import live.hms.video.error.HMSException
7
+ import live.hms.video.media.settings.HMSTrackSettings
8
+ import live.hms.video.media.tracks.*
9
+ import live.hms.video.sdk.*
10
+ import live.hms.video.sdk.models.*
11
+ import live.hms.video.sdk.models.HMSConfig
12
+ import live.hms.video.sdk.models.enums.HMSPeerUpdate
13
+ import live.hms.video.sdk.models.enums.HMSRoomUpdate
14
+ import live.hms.video.sdk.models.enums.HMSTrackUpdate
15
+ import live.hms.video.sdk.models.trackchangerequest.HMSChangeTrackStateRequest
16
+ import live.hms.video.utils.HMSCoroutineScope
17
+
18
+ class HmsSDK(
19
+ data: ReadableMap?,
20
+ HmsDelegate: HmsModule,
21
+ sdkId: String,
22
+ reactApplicationContext: ReactApplicationContext
23
+ ) {
24
+ var hmsSDK: HMSSDK? = null
25
+ private var recentRoleChangeRequest: HMSRoleChangeRequest? = null
26
+ private var changeTrackStateRequest: HMSChangeTrackStateRequest? = null
27
+ private var delegate: HmsModule = HmsDelegate
28
+ private var id: String = sdkId
29
+ private var self = this
30
+
31
+ init {
32
+ val requiredKeys =
33
+ HmsHelper.areAllRequiredKeysAvailable(
34
+ data,
35
+ arrayOf(Pair("useHardwareEchoCancellation", "Boolean"))
36
+ )
37
+ var useHardwareEchoCancellation = false
38
+ if (requiredKeys && data !== null) {
39
+ useHardwareEchoCancellation = data.getBoolean("useHardwareEchoCancellation")
40
+ }
41
+ val videoSettings = HmsHelper.getVideoTrackSettings(data?.getMap("video"))
42
+ val audioSettings =
43
+ HmsHelper.getAudioTrackSettings(data?.getMap("audio"), useHardwareEchoCancellation)
44
+
45
+ val trackSettingsBuilder = HMSTrackSettings.Builder()
46
+ val trackSettings = trackSettingsBuilder.audio(audioSettings).video(videoSettings).build()
47
+
48
+ this.hmsSDK = HMSSDK.Builder(reactApplicationContext).setTrackSettings(trackSettings).build()
49
+ }
50
+
51
+ private fun emitRequiredKeysError() {
52
+ val data: WritableMap = Arguments.createMap()
53
+ val hmsError =
54
+ HMSException(
55
+ 102,
56
+ "NOT_FOUND",
57
+ "SEND_ALL_REQUIRED_KEYS",
58
+ "REQUIRED_KEYS_NOT_FOUND",
59
+ "REQUIRED_KEYS_NOT_FOUND"
60
+ )
61
+ data.putString("event", "ON_ERROR")
62
+ data.putString("id", id)
63
+ data.putMap("error", HmsDecoder.getError(hmsError))
64
+ delegate.emitEvent("ON_ERROR", data)
65
+ }
66
+
67
+ fun emitHMSError(error: HMSException) {
68
+ val data: WritableMap = Arguments.createMap()
69
+ data.putString("event", "ON_ERROR")
70
+ data.putString("id", id)
71
+ data.putMap("error", HmsDecoder.getError(error))
72
+ delegate.emitEvent("ON_ERROR", data)
73
+ }
74
+
75
+ fun emitHMSSuccess(message: HMSMessage? = null): ReadableMap {
76
+ val hmsMessage =
77
+ if (message !== null) message.message else "function call executed successfully"
78
+ val data: WritableMap = Arguments.createMap()
79
+ data.putBoolean("success", true)
80
+ data.putString("message", hmsMessage)
81
+ return data
82
+ }
83
+
84
+ fun preview(credentials: ReadableMap) {
85
+ val requiredKeys =
86
+ HmsHelper.areAllRequiredKeysAvailable(
87
+ credentials,
88
+ arrayOf(Pair("username", "String"), Pair("authToken", "String"))
89
+ )
90
+ if (requiredKeys) {
91
+ var config =
92
+ HMSConfig(
93
+ credentials.getString("username") as String,
94
+ credentials.getString("authToken") as String,
95
+ )
96
+
97
+ when {
98
+ HmsHelper.areAllRequiredKeysAvailable(
99
+ credentials,
100
+ arrayOf(Pair("endpoint", "String"), Pair("metadata", "String"))
101
+ ) -> {
102
+ config =
103
+ HMSConfig(
104
+ credentials.getString("username") as String,
105
+ credentials.getString("authToken") as String,
106
+ initEndpoint = credentials.getString("endpoint") as String,
107
+ metadata = credentials.getString("metadata") as String,
108
+ )
109
+ }
110
+ HmsHelper.areAllRequiredKeysAvailable(credentials, arrayOf(Pair("endpoint", "String"))) -> {
111
+ config =
112
+ HMSConfig(
113
+ credentials.getString("username") as String,
114
+ credentials.getString("authToken") as String,
115
+ initEndpoint = credentials.getString("endpoint") as String,
116
+ )
117
+ }
118
+ HmsHelper.areAllRequiredKeysAvailable(credentials, arrayOf(Pair("metadata", "String"))) -> {
119
+ config =
120
+ HMSConfig(
121
+ credentials.getString("username") as String,
122
+ credentials.getString("authToken") as String,
123
+ metadata = credentials.getString("metadata") as String,
124
+ )
125
+ }
126
+ }
127
+
128
+ hmsSDK?.preview(
129
+ config,
130
+ object : HMSPreviewListener {
131
+ override fun onError(error: HMSException) {
132
+ self.emitHMSError(error)
133
+ }
134
+
135
+ override fun onPreview(room: HMSRoom, localTracks: Array<HMSTrack>) {
136
+ val previewTracks = HmsDecoder.getPreviewTracks(localTracks)
137
+ val hmsRoom = HmsDecoder.getHmsRoom(room)
138
+ val localPeerData = HmsDecoder.getHmsLocalPeer(hmsSDK?.getLocalPeer())
139
+ val data: WritableMap = Arguments.createMap()
140
+
141
+ data.putMap("previewTracks", previewTracks)
142
+ data.putMap("room", hmsRoom)
143
+ data.putMap("localPeer", localPeerData)
144
+ data.putString("id", id)
145
+ delegate.emitEvent("ON_PREVIEW", data)
146
+ }
147
+ }
148
+ )
149
+ } else {
150
+ self.emitRequiredKeysError()
151
+ }
152
+ }
153
+
154
+ fun join(credentials: ReadableMap) {
155
+ val requiredKeys =
156
+ HmsHelper.areAllRequiredKeysAvailable(
157
+ credentials,
158
+ arrayOf(Pair("username", "String"), Pair("authToken", "String"))
159
+ )
160
+ if (requiredKeys) {
161
+ var config =
162
+ HMSConfig(
163
+ credentials.getString("username") as String,
164
+ credentials.getString("authToken") as String
165
+ )
166
+
167
+ when {
168
+ HmsHelper.areAllRequiredKeysAvailable(
169
+ credentials,
170
+ arrayOf(Pair("endpoint", "String"), Pair("metadata", "String"))
171
+ ) -> {
172
+ config =
173
+ HMSConfig(
174
+ credentials.getString("username") as String,
175
+ credentials.getString("authToken") as String,
176
+ initEndpoint = credentials.getString("endpoint") as String,
177
+ metadata = credentials.getString("metadata") as String,
178
+ )
179
+ }
180
+ HmsHelper.areAllRequiredKeysAvailable(credentials, arrayOf(Pair("endpoint", "String"))) -> {
181
+ config =
182
+ HMSConfig(
183
+ credentials.getString("username") as String,
184
+ credentials.getString("authToken") as String,
185
+ initEndpoint = credentials.getString("endpoint") as String,
186
+ )
187
+ }
188
+ HmsHelper.areAllRequiredKeysAvailable(credentials, arrayOf(Pair("metadata", "String"))) -> {
189
+ config =
190
+ HMSConfig(
191
+ credentials.getString("username") as String,
192
+ credentials.getString("authToken") as String,
193
+ metadata = credentials.getString("metadata") as String,
194
+ )
195
+ }
196
+ }
197
+
198
+ HMSCoroutineScope.launch {
199
+ try {
200
+ hmsSDK?.join(
201
+ config,
202
+ object : HMSUpdateListener {
203
+ override fun onChangeTrackStateRequest(details: HMSChangeTrackStateRequest) {
204
+ val decodedChangeTrackStateRequest =
205
+ HmsDecoder.getHmsChangeTrackStateRequest(details, id)
206
+ delegate.emitEvent(
207
+ "ON_CHANGE_TRACK_STATE_REQUEST",
208
+ decodedChangeTrackStateRequest
209
+ )
210
+ changeTrackStateRequest = details
211
+ }
212
+
213
+ override fun onRemovedFromRoom(notification: HMSRemovedFromRoom) {
214
+ super.onRemovedFromRoom(notification)
215
+
216
+ val data: WritableMap = Arguments.createMap()
217
+ val requestedBy =
218
+ HmsDecoder.getHmsRemotePeer(notification.peerWhoRemoved as HMSRemotePeer?)
219
+ val roomEnded = notification.roomWasEnded
220
+ val reason = notification.reason
221
+
222
+ data.putMap("requestedBy", requestedBy)
223
+ data.putBoolean("roomEnded", roomEnded)
224
+ data.putString("reason", reason)
225
+ data.putString("id", id)
226
+
227
+ delegate.emitEvent("ON_REMOVED_FROM_ROOM", data)
228
+ }
229
+
230
+ override fun onError(error: HMSException) {
231
+ self.emitHMSError(error)
232
+ }
233
+
234
+ override fun onJoin(room: HMSRoom) {
235
+ val roomData = HmsDecoder.getHmsRoom(room)
236
+ val localPeerData = HmsDecoder.getHmsLocalPeer(hmsSDK?.getLocalPeer())
237
+ val remotePeerData = HmsDecoder.getHmsRemotePeers(hmsSDK?.getRemotePeers())
238
+ val roles = HmsDecoder.getAllRoles(hmsSDK?.getRoles())
239
+
240
+ val data: WritableMap = Arguments.createMap()
241
+
242
+ data.putMap("room", roomData)
243
+ data.putMap("localPeer", localPeerData)
244
+ data.putArray("remotePeers", remotePeerData)
245
+ data.putArray("roles", roles)
246
+ data.putString("id", id)
247
+ delegate.emitEvent("ON_JOIN", data)
248
+ }
249
+
250
+ override fun onPeerUpdate(type: HMSPeerUpdate, peer: HMSPeer) {
251
+ val updateType = type.name
252
+ val roomData = HmsDecoder.getHmsRoom(hmsSDK?.getRoom())
253
+ val localPeerData = HmsDecoder.getHmsLocalPeer(hmsSDK?.getLocalPeer())
254
+ val remotePeerData = HmsDecoder.getHmsRemotePeers(hmsSDK?.getRemotePeers())
255
+ val hmsPeer = HmsDecoder.getHmsPeer(peer)
256
+
257
+ val data: WritableMap = Arguments.createMap()
258
+
259
+ data.putMap("peer", hmsPeer)
260
+ data.putMap("room", roomData)
261
+ data.putString("type", updateType)
262
+ data.putMap("localPeer", localPeerData)
263
+ data.putArray("remotePeers", remotePeerData)
264
+ data.putString("id", id)
265
+ delegate.emitEvent("ON_PEER_UPDATE", data)
266
+ }
267
+
268
+ override fun onRoomUpdate(type: HMSRoomUpdate, hmsRoom: HMSRoom) {
269
+ val updateType = type.name
270
+ val roomData = HmsDecoder.getHmsRoom(hmsRoom)
271
+ val localPeerData = HmsDecoder.getHmsLocalPeer(hmsSDK?.getLocalPeer())
272
+ val remotePeerData = HmsDecoder.getHmsRemotePeers(hmsSDK?.getRemotePeers())
273
+
274
+ val data: WritableMap = Arguments.createMap()
275
+
276
+ data.putString("type", updateType)
277
+ data.putMap("room", roomData)
278
+ data.putMap("localPeer", localPeerData)
279
+ data.putArray("remotePeers", remotePeerData)
280
+ data.putString("id", id)
281
+ delegate.emitEvent("ON_ROOM_UPDATE", data)
282
+ }
283
+
284
+ override fun onTrackUpdate(type: HMSTrackUpdate, track: HMSTrack, peer: HMSPeer) {
285
+ val updateType = type.name
286
+ val localPeerData = HmsDecoder.getHmsLocalPeer(hmsSDK?.getLocalPeer())
287
+ val remotePeerData = HmsDecoder.getHmsRemotePeers(hmsSDK?.getRemotePeers())
288
+ val roomData = HmsDecoder.getHmsRoom(hmsSDK?.getRoom())
289
+ val hmsPeer = HmsDecoder.getHmsPeer(peer)
290
+ val hmsTrack = HmsDecoder.getHmsTrack(track)
291
+
292
+ val data: WritableMap = Arguments.createMap()
293
+
294
+ data.putMap("peer", hmsPeer)
295
+ data.putMap("track", hmsTrack)
296
+ data.putMap("room", roomData)
297
+ data.putString("type", updateType)
298
+ data.putMap("localPeer", localPeerData)
299
+ data.putArray("remotePeers", remotePeerData)
300
+ data.putString("id", id)
301
+ delegate.emitEvent("ON_TRACK_UPDATE", data)
302
+ }
303
+
304
+ override fun onMessageReceived(message: HMSMessage) {
305
+ val data: WritableMap = Arguments.createMap()
306
+
307
+ data.putString("sender", message.sender.name)
308
+ data.putString("message", message.message)
309
+ data.putString("type", message.type)
310
+ data.putString("time", message.serverReceiveTime.toString())
311
+ data.putString("id", id)
312
+ data.putString("event", "ON_MESSAGE")
313
+
314
+ delegate.emitEvent("ON_MESSAGE", data)
315
+ }
316
+
317
+ override fun onReconnected() {
318
+ val data: WritableMap = Arguments.createMap()
319
+ data.putString("event", "RECONNECTED")
320
+ data.putString("id", id)
321
+ delegate.emitEvent("RECONNECTED", data)
322
+ }
323
+
324
+ override fun onReconnecting(error: HMSException) {
325
+ val data: WritableMap = Arguments.createMap()
326
+ data.putString("event", "RECONNECTING")
327
+ data.putString("id", id)
328
+ delegate.emitEvent("RECONNECTING", data)
329
+ }
330
+
331
+ override fun onRoleChangeRequest(request: HMSRoleChangeRequest) {
332
+ val decodedChangeRoleRequest = HmsDecoder.getHmsRoleChangeRequest(request, id)
333
+ delegate.emitEvent("ON_ROLE_CHANGE_REQUEST", decodedChangeRoleRequest)
334
+ recentRoleChangeRequest = request
335
+ }
336
+ }
337
+ )
338
+ } catch (e: HMSException) {
339
+ self.emitHMSError(e)
340
+ }
341
+
342
+ hmsSDK?.addAudioObserver(
343
+ object : HMSAudioListener {
344
+ override fun onAudioLevelUpdate(speakers: Array<HMSSpeaker>) {
345
+ val data: WritableMap = Arguments.createMap()
346
+ data.putInt("count", speakers.size)
347
+ data.putString("event", "ON_SPEAKER")
348
+
349
+ val peers: WritableArray = Arguments.createArray()
350
+ for (speaker in speakers) {
351
+ val speakerArray: WritableMap = Arguments.createMap()
352
+ speakerArray.putMap("peer", HmsDecoder.getHmsPeer(speaker.peer))
353
+ speakerArray.putInt("level", speaker.level)
354
+ speakerArray.putMap("track", HmsDecoder.getHmsTrack(speaker.hmsTrack))
355
+ peers.pushMap(speakerArray)
356
+ }
357
+ data.putArray("peers", peers)
358
+ data.putString("id", id)
359
+ delegate.emitEvent("ON_SPEAKER", data)
360
+ }
361
+ }
362
+ )
363
+ }
364
+ } else {
365
+ self.emitRequiredKeysError()
366
+ }
367
+ }
368
+
369
+ fun setLocalMute(data: ReadableMap) {
370
+ val isMute = data.getBoolean("isMute")
371
+ hmsSDK?.getLocalPeer()?.audioTrack?.setMute(isMute)
372
+ val type = if (isMute) "TRACK_MUTED" else "TRACK_UNMUTED"
373
+ val localPeerData = HmsDecoder.getHmsLocalPeer(hmsSDK?.getLocalPeer())
374
+ val remotePeerData = HmsDecoder.getHmsRemotePeers(hmsSDK?.getRemotePeers())
375
+ val roomData = HmsDecoder.getHmsRoom(hmsSDK?.getRoom())
376
+
377
+ val map: WritableMap = Arguments.createMap()
378
+
379
+ map.putMap("room", roomData)
380
+ map.putString("type", type)
381
+ map.putMap("localPeer", localPeerData)
382
+ map.putArray("remotePeers", remotePeerData)
383
+ map.putString("id", id)
384
+ delegate.emitEvent("ON_TRACK_UPDATE", map)
385
+ }
386
+
387
+ fun setLocalVideoMute(data: ReadableMap) {
388
+ val isMute = data.getBoolean("isMute")
389
+ hmsSDK?.getLocalPeer()?.videoTrack?.setMute(isMute)
390
+ }
391
+
392
+ fun switchCamera() {
393
+ if (hmsSDK?.getLocalPeer()?.videoTrack?.isMute == false) {
394
+ HMSCoroutineScope.launch { hmsSDK?.getLocalPeer()?.videoTrack?.switchCamera() }
395
+ }
396
+ }
397
+
398
+ fun leave(callback: Promise?) {
399
+ hmsSDK?.leave(
400
+ object : HMSActionResultListener {
401
+ override fun onSuccess() {
402
+ callback?.resolve(emitHMSSuccess())
403
+ }
404
+
405
+ override fun onError(error: HMSException) {
406
+ callback?.reject(error.code.toString(), error.message)
407
+ self.emitHMSError(error)
408
+ }
409
+ }
410
+ )
411
+ }
412
+
413
+ fun sendBroadcastMessage(data: ReadableMap, callback: Promise?) {
414
+ val requiredKeys =
415
+ HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("message", "String")))
416
+ if (requiredKeys) {
417
+ val type =
418
+ if (HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("type", "String"))))
419
+ data.getString("type")
420
+ else "chat"
421
+ hmsSDK?.sendBroadcastMessage(
422
+ data.getString("message") as String,
423
+ type as String,
424
+ object : HMSMessageResultListener {
425
+ override fun onError(error: HMSException) {
426
+ self.emitHMSError(error)
427
+ callback?.reject(error.code.toString(), error.message)
428
+ }
429
+ override fun onSuccess(hmsMessage: HMSMessage) {
430
+ callback?.resolve(emitHMSSuccess(hmsMessage))
431
+ }
432
+ }
433
+ )
434
+ } else {
435
+ self.emitRequiredKeysError()
436
+ callback?.reject("101", "REQUIRED_KEYS_NOT_FOUND")
437
+ }
438
+ }
439
+
440
+ fun sendGroupMessage(data: ReadableMap, callback: Promise?) {
441
+ val requiredKeys =
442
+ HmsHelper.areAllRequiredKeysAvailable(
443
+ data,
444
+ arrayOf(Pair("message", "String"), Pair("roles", "Array"))
445
+ )
446
+ if (requiredKeys) {
447
+ val type =
448
+ if (HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("type", "String"))))
449
+ data.getString("type")
450
+ else "chat"
451
+ val message = data.getString("message")
452
+ val targetedRoles = data.getArray("roles")?.toArrayList() as? ArrayList<String>
453
+ val roles = hmsSDK?.getRoles()
454
+ val encodedTargetedRoles = HmsHelper.getRolesFromRoleNames(targetedRoles, roles)
455
+
456
+ if (message != null) {
457
+ hmsSDK?.sendGroupMessage(
458
+ message,
459
+ type as String,
460
+ encodedTargetedRoles,
461
+ object : HMSMessageResultListener {
462
+ override fun onError(error: HMSException) {
463
+ self.emitHMSError(error)
464
+ callback?.reject(error.code.toString(), error.message)
465
+ }
466
+ override fun onSuccess(hmsMessage: HMSMessage) {
467
+ callback?.resolve(emitHMSSuccess(hmsMessage))
468
+ }
469
+ }
470
+ )
471
+ }
472
+ } else {
473
+ self.emitRequiredKeysError()
474
+ callback?.reject("101", "REQUIRED_KEYS_NOT_FOUND")
475
+ }
476
+ }
477
+
478
+ fun sendDirectMessage(data: ReadableMap, callback: Promise?) {
479
+ val requiredKeys =
480
+ HmsHelper.areAllRequiredKeysAvailable(
481
+ data,
482
+ arrayOf(Pair("message", "String"), Pair("peerId", "String"))
483
+ )
484
+ if (requiredKeys) {
485
+ val type =
486
+ if (HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("type", "String"))))
487
+ data.getString("type")
488
+ else "chat"
489
+ val message = data.getString("message")
490
+ val peerId = data.getString("peerId")
491
+ val peers = hmsSDK?.getPeers()
492
+ val peer = HmsHelper.getPeerFromPeerId(peerId, peers)
493
+ if (message != null && peer != null) {
494
+ hmsSDK?.sendDirectMessage(
495
+ message,
496
+ type as String,
497
+ peer,
498
+ object : HMSMessageResultListener {
499
+ override fun onError(error: HMSException) {
500
+ self.emitHMSError(error)
501
+ callback?.reject(error.code.toString(), error.message)
502
+ }
503
+ override fun onSuccess(hmsMessage: HMSMessage) {
504
+ callback?.resolve(emitHMSSuccess(hmsMessage))
505
+ }
506
+ }
507
+ )
508
+ }
509
+ } else {
510
+ self.emitRequiredKeysError()
511
+ callback?.reject("101", "REQUIRED_KEYS_NOT_FOUND")
512
+ }
513
+ }
514
+
515
+ fun changeRole(data: ReadableMap, callback: Promise?) {
516
+ val requiredKeys =
517
+ HmsHelper.areAllRequiredKeysAvailable(
518
+ data,
519
+ arrayOf(Pair("peerId", "String"), Pair("role", "String"), Pair("force", "Boolean"))
520
+ )
521
+ if (requiredKeys) {
522
+ val peerId = data.getString("peerId")
523
+ val role = data.getString("role")
524
+ val force = data.getBoolean("force")
525
+
526
+ if (peerId !== null && role !== null) {
527
+ val hmsPeer = HmsHelper.getPeerFromPeerId(peerId, hmsSDK?.getPeers())
528
+ val hmsRole = HmsHelper.getRoleFromRoleName(role, hmsSDK?.getRoles())
529
+
530
+ if (hmsRole != null && hmsPeer != null) {
531
+ hmsSDK?.changeRole(
532
+ hmsPeer,
533
+ hmsRole,
534
+ force,
535
+ object : HMSActionResultListener {
536
+ override fun onSuccess() {
537
+ callback?.resolve(emitHMSSuccess())
538
+ }
539
+ override fun onError(error: HMSException) {
540
+ self.emitHMSError(error)
541
+ callback?.reject(error.code.toString(), error.message)
542
+ }
543
+ }
544
+ )
545
+ }
546
+ }
547
+ } else {
548
+ self.emitRequiredKeysError()
549
+ callback?.reject("101", "REQUIRED_KEYS_NOT_FOUND")
550
+ }
551
+ }
552
+
553
+ fun changeTrackState(data: ReadableMap, callback: Promise?) {
554
+ val requiredKeys =
555
+ HmsHelper.areAllRequiredKeysAvailable(
556
+ data,
557
+ arrayOf(Pair("trackId", "String"), Pair("mute", "Boolean"))
558
+ )
559
+ if (requiredKeys) {
560
+ val trackId = data.getString("trackId")
561
+ val mute = data.getBoolean("mute")
562
+ val remotePeers = hmsSDK?.getRemotePeers()
563
+ val track = HmsHelper.getTrackFromTrackId(trackId, remotePeers)
564
+ if (track != null) {
565
+ hmsSDK?.changeTrackState(
566
+ track,
567
+ mute,
568
+ object : HMSActionResultListener {
569
+ override fun onSuccess() {
570
+ callback?.resolve(emitHMSSuccess())
571
+ }
572
+ override fun onError(error: HMSException) {
573
+ self.emitHMSError(error)
574
+ callback?.reject(error.code.toString(), error.message)
575
+ }
576
+ }
577
+ )
578
+ }
579
+ } else {
580
+ self.emitRequiredKeysError()
581
+ callback?.reject("101", "REQUIRED_KEYS_NOT_FOUND")
582
+ }
583
+ }
584
+
585
+ fun changeTrackStateRoles(data: ReadableMap, callback: Promise?) {
586
+ val requiredKeys =
587
+ HmsHelper.areAllRequiredKeysAvailable(
588
+ data,
589
+ arrayOf(
590
+ Pair("source", "String"),
591
+ Pair("mute", "Boolean"),
592
+ Pair("type", "String"),
593
+ Pair("roles", "Array")
594
+ )
595
+ )
596
+ if (requiredKeys) {
597
+ val mute: Boolean = data.getBoolean("mute")
598
+ val type =
599
+ if (data.getString("type") == HMSTrackType.AUDIO.toString()) HMSTrackType.AUDIO
600
+ else HMSTrackType.VIDEO
601
+ val source = data.getString("source")
602
+ val targetedRoles = data.getArray("roles")?.toArrayList() as? ArrayList<String>
603
+ val roles = hmsSDK?.getRoles()
604
+ val encodedTargetedRoles = HmsHelper.getRolesFromRoleNames(targetedRoles, roles)
605
+ hmsSDK?.changeTrackState(
606
+ mute,
607
+ type,
608
+ source,
609
+ encodedTargetedRoles,
610
+ object : HMSActionResultListener {
611
+ override fun onSuccess() {
612
+ callback?.resolve(emitHMSSuccess())
613
+ }
614
+ override fun onError(error: HMSException) {
615
+ self.emitHMSError(error)
616
+ callback?.reject(error.code.toString(), error.message)
617
+ }
618
+ }
619
+ )
620
+ } else {
621
+ self.emitRequiredKeysError()
622
+ callback?.reject("101", "REQUIRED_KEYS_NOT_FOUND")
623
+ }
624
+ }
625
+
626
+ fun isMute(data: ReadableMap, callback: Promise?) {
627
+ val requiredKeys =
628
+ HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("trackId", "String")))
629
+ if (requiredKeys) {
630
+ val trackId = data.getString("trackId")
631
+ val remotePeers = hmsSDK?.getRemotePeers()
632
+ val localPeer = hmsSDK?.getLocalPeer()
633
+ val localTrack = HmsHelper.getLocalTrackFromTrackId(trackId, localPeer)
634
+ if (localTrack == null) {
635
+ val track = HmsHelper.getTrackFromTrackId(trackId, remotePeers)
636
+ if (track != null) {
637
+ val mute = track.isMute
638
+ callback?.resolve(mute)
639
+ } else {
640
+ callback?.reject("101", "NOT_FOUND")
641
+ }
642
+ } else {
643
+ val mute = localTrack.isMute
644
+ callback?.resolve(mute)
645
+ }
646
+ } else {
647
+ callback?.reject("101", "REQUIRED_KEYS_NOT_FOUND")
648
+ }
649
+ }
650
+
651
+ fun removePeer(data: ReadableMap, callback: Promise?) {
652
+ val requiredKeys =
653
+ HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("peerId", "String")))
654
+ if (requiredKeys) {
655
+ val peerId = data.getString("peerId")
656
+ var reason = data.getString("reason")
657
+
658
+ if (reason == null) {
659
+ reason = ""
660
+ }
661
+
662
+ val peers = hmsSDK?.getRemotePeers()
663
+
664
+ val peer = HmsHelper.getRemotePeerFromPeerId(peerId, peers)
665
+
666
+ if (peer != null) {
667
+ hmsSDK?.removePeerRequest(
668
+ peer,
669
+ reason,
670
+ object : HMSActionResultListener {
671
+ override fun onSuccess() {
672
+ callback?.resolve(emitHMSSuccess())
673
+ }
674
+ override fun onError(error: HMSException) {
675
+ self.emitHMSError(error)
676
+ callback?.reject(error.code.toString(), error.message)
677
+ }
678
+ }
679
+ )
680
+ } else {
681
+ callback?.reject("101", "PEER_NOT_FOUND")
682
+ }
683
+ } else {
684
+ self.emitRequiredKeysError()
685
+ callback?.reject("101", "REQUIRED_KEYS_NOT_FOUND")
686
+ }
687
+ }
688
+
689
+ fun endRoom(data: ReadableMap, callback: Promise?) {
690
+ val lock = data.getBoolean("lock")
691
+ var reason = data.getString("reason")
692
+ if (reason == null) {
693
+ reason = ""
694
+ }
695
+
696
+ hmsSDK?.endRoom(
697
+ reason,
698
+ lock,
699
+ object : HMSActionResultListener {
700
+ override fun onSuccess() {
701
+ callback?.resolve(emitHMSSuccess())
702
+ }
703
+ override fun onError(error: HMSException) {
704
+ self.emitHMSError(error)
705
+ callback?.reject(error.code.toString(), error.message)
706
+ }
707
+ }
708
+ )
709
+ }
710
+
711
+ fun acceptRoleChange() {
712
+ if (recentRoleChangeRequest !== null) {
713
+ hmsSDK?.acceptChangeRole(
714
+ recentRoleChangeRequest!!,
715
+ object : HMSActionResultListener {
716
+ override fun onSuccess() {
717
+ recentRoleChangeRequest = null
718
+ }
719
+
720
+ override fun onError(error: HMSException) {
721
+ recentRoleChangeRequest = null
722
+ self.emitHMSError(error)
723
+ }
724
+ }
725
+ )
726
+ }
727
+ }
728
+
729
+ fun muteAllPeersAudio(data: ReadableMap) {
730
+ val requiredKeys = HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("mute", "Boolean")))
731
+ if (requiredKeys) {
732
+ val mute = data.getBoolean("mute")
733
+ val peers = hmsSDK?.getRemotePeers()
734
+ if (peers != null) {
735
+ for (remotePeer in peers) {
736
+ val peerId = remotePeer.peerID
737
+ val peer = HmsHelper.getRemotePeerFromPeerId(peerId, peers)
738
+ peer?.audioTrack?.isPlaybackAllowed = !mute
739
+ }
740
+ val localPeerData = HmsDecoder.getHmsLocalPeer(hmsSDK?.getLocalPeer())
741
+ val remotePeerData = HmsDecoder.getHmsRemotePeers(hmsSDK?.getRemotePeers())
742
+
743
+ val map: WritableMap = Arguments.createMap()
744
+
745
+ map.putMap("localPeer", localPeerData)
746
+ map.putArray("remotePeers", remotePeerData)
747
+ map.putString("id", id)
748
+ delegate.emitEvent("ON_PEER_UPDATE", map)
749
+ }
750
+ } else {
751
+ this.emitRequiredKeysError()
752
+ }
753
+ }
754
+
755
+ fun setPlaybackAllowed(data: ReadableMap) {
756
+ val requiredKeys =
757
+ HmsHelper.areAllRequiredKeysAvailable(
758
+ data,
759
+ arrayOf(Pair("trackId", "String"), Pair("playbackAllowed", "Boolean"))
760
+ )
761
+ if (requiredKeys) {
762
+ val trackId = data.getString("trackId")
763
+ val playbackAllowed = data.getBoolean("playbackAllowed")
764
+ val remotePeers = hmsSDK?.getRemotePeers()
765
+ val remoteAudioTrack = HmsHelper.getRemoteAudioTrackFromTrackId(trackId, remotePeers)
766
+ val remoteVideoTrack = HmsHelper.getRemoteVideoTrackFromTrackId(trackId, remotePeers)
767
+ if (remoteAudioTrack != null) {
768
+ remoteAudioTrack.isPlaybackAllowed = playbackAllowed
769
+ } else if (remoteVideoTrack != null) {
770
+ remoteVideoTrack.isPlaybackAllowed = playbackAllowed
771
+ }
772
+ } else {
773
+ this.emitRequiredKeysError()
774
+ }
775
+ }
776
+
777
+ fun isPlaybackAllowed(data: ReadableMap, callback: Promise?) {
778
+ val requiredKeys =
779
+ HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("trackId", "String")))
780
+ if (requiredKeys) {
781
+ val trackId = data.getString("trackId")
782
+ val remotePeers = hmsSDK?.getRemotePeers()
783
+ val remoteAudioTrack = HmsHelper.getRemoteAudioTrackFromTrackId(trackId, remotePeers)
784
+ val remoteVideoTrack = HmsHelper.getRemoteVideoTrackFromTrackId(trackId, remotePeers)
785
+ when {
786
+ remoteAudioTrack != null -> {
787
+ val isPlaybackAllowed = remoteAudioTrack.isPlaybackAllowed
788
+ callback?.resolve(isPlaybackAllowed)
789
+ }
790
+ remoteVideoTrack != null -> {
791
+ val isPlaybackAllowed = remoteVideoTrack.isPlaybackAllowed
792
+ callback?.resolve(isPlaybackAllowed)
793
+ }
794
+ else -> {
795
+ callback?.reject("101", "NOT_FOUND")
796
+ }
797
+ }
798
+ } else {
799
+ callback?.reject("101", "TRACK_ID_NOT_FOUND")
800
+ }
801
+ }
802
+
803
+ fun getRoom(callback: Promise?) {
804
+ val roomData = HmsDecoder.getHmsRoom(hmsSDK?.getRoom())
805
+ callback?.resolve(roomData)
806
+ }
807
+
808
+ fun setVolume(data: ReadableMap) {
809
+ val requiredKeys =
810
+ HmsHelper.areAllRequiredKeysAvailable(
811
+ data,
812
+ arrayOf(Pair("trackId", "String"), Pair("volume", "Float"))
813
+ )
814
+
815
+ if (requiredKeys) {
816
+ val trackId = data.getString("trackId")
817
+ val volume = data.getDouble("volume")
818
+
819
+ val remotePeers = hmsSDK?.getRemotePeers()
820
+
821
+ if (remotePeers != null) {
822
+ for (peer in remotePeers) {
823
+ val audioTrackId = peer.audioTrack?.trackId
824
+
825
+ if (audioTrackId == trackId) {
826
+ peer.audioTrack?.setVolume(volume)
827
+ return
828
+ }
829
+
830
+ for (auxTrack in peer.auxiliaryTracks) {
831
+ if (auxTrack.trackId == trackId && auxTrack.type == HMSTrackType.AUDIO) {
832
+ val trackExtracted = auxTrack as? HMSRemoteAudioTrack
833
+
834
+ if (trackExtracted != null) {
835
+ trackExtracted.setVolume(volume)
836
+ return
837
+ }
838
+ }
839
+ }
840
+ }
841
+ }
842
+ } else {
843
+ this.emitRequiredKeysError()
844
+ }
845
+ }
846
+
847
+ fun getVolume(data: ReadableMap, callback: Promise?) {
848
+ val requiredKeys =
849
+ HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("trackId", "String")))
850
+
851
+ if (requiredKeys) {
852
+ val trackId = data.getString("trackId")
853
+
854
+ val localPeer = hmsSDK?.getLocalPeer()
855
+
856
+ if (localPeer?.audioTrack?.trackId == trackId) {
857
+ val volume = localPeer?.audioTrack?.volume
858
+ callback?.resolve(volume)
859
+ return
860
+ }
861
+ callback?.reject("101", "TRACK_IDS_DO_NOT_MATCH")
862
+ } else {
863
+ callback?.reject("101", "TRACK_NOT_FOUND")
864
+ }
865
+ }
866
+
867
+ fun changeMetadata(data: ReadableMap, callback: Promise?) {
868
+ val requiredKeys =
869
+ HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("metadata", "String")))
870
+
871
+ if (requiredKeys) {
872
+ val metadata = data.getString("metadata")
873
+
874
+ if (metadata != null) {
875
+ hmsSDK?.changeMetadata(
876
+ metadata,
877
+ object : HMSActionResultListener {
878
+ override fun onSuccess() {
879
+ callback?.resolve(emitHMSSuccess())
880
+ }
881
+ override fun onError(error: HMSException) {
882
+ callback?.reject(error.code.toString(), error.message)
883
+ self.emitHMSError(error)
884
+ }
885
+ }
886
+ )
887
+ }
888
+ } else {
889
+ self.emitRequiredKeysError()
890
+ }
891
+ }
892
+
893
+ fun startRTMPOrRecording(data: ReadableMap, callback: Promise?) {
894
+ val requiredKeys =
895
+ HmsHelper.areAllRequiredKeysAvailable(
896
+ data,
897
+ arrayOf(Pair("record", "Boolean"), Pair("meetingURL", "String"))
898
+ )
899
+ if (requiredKeys) {
900
+ val record = data.getBoolean("record")
901
+ val meetingURL = data.getString("meetingURL") as String
902
+ var rtmpURLs = data.getArray("rtmpURLs")
903
+ if (rtmpURLs == null) {
904
+ rtmpURLs = Arguments.createArray()
905
+ }
906
+ val rtmpURLsList = HmsHelper.getRtmpUrls(rtmpURLs)
907
+ val config = HMSRecordingConfig(meetingURL, rtmpURLsList, record)
908
+
909
+ hmsSDK?.startRtmpOrRecording(
910
+ config,
911
+ object : HMSActionResultListener {
912
+ override fun onSuccess() {
913
+ callback?.resolve(emitHMSSuccess())
914
+ }
915
+ override fun onError(error: HMSException) {
916
+ callback?.reject(error.code.toString(), error.message)
917
+ self.emitHMSError(error)
918
+ }
919
+ }
920
+ )
921
+ } else {
922
+ callback?.reject("101", "REQUIRED_KEYS_NOT_FOUND")
923
+ self.emitRequiredKeysError()
924
+ }
925
+ }
926
+
927
+ fun stopRtmpAndRecording(callback: Promise?) {
928
+ hmsSDK?.stopRtmpAndRecording(
929
+ object : HMSActionResultListener {
930
+ override fun onSuccess() {
931
+ callback?.resolve(emitHMSSuccess())
932
+ }
933
+ override fun onError(error: HMSException) {
934
+ callback?.reject(error.code.toString(), error.message)
935
+ self.emitHMSError(error)
936
+ }
937
+ }
938
+ )
939
+ }
940
+ }