@100mslive/react-native-hms 1.2.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (267) hide show
  1. package/README.md +2 -2
  2. package/android/src/main/java/com/reactnativehmssdk/HMSDecoder.kt +121 -53
  3. package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +14 -0
  4. package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +139 -31
  5. package/ios/HMSDecoder.swift +113 -50
  6. package/ios/HMSManager.m +4 -0
  7. package/ios/HMSManager.swift +15 -1
  8. package/ios/HMSRNSDK.swift +119 -26
  9. package/ios/HMSView.swift +1 -1
  10. package/lib/commonjs/classes/HMSAudioCodec.js +4 -4
  11. package/lib/commonjs/classes/HMSAudioCodec.js.map +1 -1
  12. package/lib/commonjs/classes/HMSAudioDevice.js +4 -4
  13. package/lib/commonjs/classes/HMSAudioDevice.js.map +1 -1
  14. package/lib/commonjs/classes/HMSAudioFilePlayerNode.js.map +1 -1
  15. package/lib/commonjs/classes/HMSAudioMixerSource.js.map +1 -1
  16. package/lib/commonjs/classes/HMSAudioMixingMode.js +4 -4
  17. package/lib/commonjs/classes/HMSAudioMixingMode.js.map +1 -1
  18. package/lib/commonjs/classes/HMSAudioMode.js +4 -4
  19. package/lib/commonjs/classes/HMSAudioMode.js.map +1 -1
  20. package/lib/commonjs/classes/HMSAudioNode.js +2 -1
  21. package/lib/commonjs/classes/HMSAudioNode.js.map +1 -1
  22. package/lib/commonjs/classes/HMSAudioSettings.js.map +1 -1
  23. package/lib/commonjs/classes/HMSAudioTrack.js.map +1 -1
  24. package/lib/commonjs/classes/HMSAudioTrackSettings.js.map +1 -1
  25. package/lib/commonjs/classes/HMSBrowserRecordingState.js.map +1 -1
  26. package/lib/commonjs/classes/HMSCameraFacing.js +4 -4
  27. package/lib/commonjs/classes/HMSCameraFacing.js.map +1 -1
  28. package/lib/commonjs/classes/HMSChangeTrackStateRequest.js.map +1 -1
  29. package/lib/commonjs/classes/HMSConfig.js.map +1 -1
  30. package/lib/commonjs/classes/HMSConstants.js +11 -0
  31. package/lib/commonjs/classes/HMSConstants.js.map +1 -0
  32. package/lib/commonjs/classes/HMSEncoder.js +21 -43
  33. package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
  34. package/lib/commonjs/classes/HMSException.js.map +1 -1
  35. package/lib/commonjs/classes/HMSHLSConfig.js.map +1 -1
  36. package/lib/commonjs/classes/HMSHLSMeetingURLVariant.js.map +1 -1
  37. package/lib/commonjs/classes/HMSHLSRecordingConfig.js.map +1 -1
  38. package/lib/commonjs/classes/HMSHLSRecordingState.js.map +1 -1
  39. package/lib/commonjs/classes/HMSHLSStreamingState.js.map +1 -1
  40. package/lib/commonjs/classes/HMSHLSVariant.js.map +1 -1
  41. package/lib/commonjs/classes/HMSHelper.js.map +1 -1
  42. package/lib/commonjs/classes/HMSLocalAudioStats.js.map +1 -1
  43. package/lib/commonjs/classes/HMSLocalAudioTrack.js.map +1 -1
  44. package/lib/commonjs/classes/HMSLocalPeer.js +0 -1
  45. package/lib/commonjs/classes/HMSLocalPeer.js.map +1 -1
  46. package/lib/commonjs/classes/HMSLocalVideoStats.js.map +1 -1
  47. package/lib/commonjs/classes/HMSLocalVideoTrack.js.map +1 -1
  48. package/lib/commonjs/classes/HMSLogAlarmManager.js +4 -4
  49. package/lib/commonjs/classes/HMSLogAlarmManager.js.map +1 -1
  50. package/lib/commonjs/classes/HMSLogLevel.js +4 -4
  51. package/lib/commonjs/classes/HMSLogLevel.js.map +1 -1
  52. package/lib/commonjs/classes/HMSLogSettings.js.map +1 -1
  53. package/lib/commonjs/classes/HMSLogger.js +17 -25
  54. package/lib/commonjs/classes/HMSLogger.js.map +1 -1
  55. package/lib/commonjs/classes/HMSMessage.js.map +1 -1
  56. package/lib/commonjs/classes/HMSMessageRecipient.js.map +1 -1
  57. package/lib/commonjs/classes/HMSMessageRecipientType.js +4 -4
  58. package/lib/commonjs/classes/HMSMessageRecipientType.js.map +1 -1
  59. package/lib/commonjs/classes/HMSMessageType.js +4 -4
  60. package/lib/commonjs/classes/HMSMessageType.js.map +1 -1
  61. package/lib/commonjs/classes/HMSMicNode.js.map +1 -1
  62. package/lib/commonjs/classes/HMSNativeEventEmitter.js +0 -5
  63. package/lib/commonjs/classes/HMSNativeEventEmitter.js.map +1 -1
  64. package/lib/commonjs/classes/HMSNetworkQuality.js.map +1 -1
  65. package/lib/commonjs/classes/HMSPIPListenerActions.js +4 -4
  66. package/lib/commonjs/classes/HMSPIPListenerActions.js.map +1 -1
  67. package/lib/commonjs/classes/HMSPeer.js +66 -19
  68. package/lib/commonjs/classes/HMSPeer.js.map +1 -1
  69. package/lib/commonjs/classes/HMSPeerUpdate.js +7 -5
  70. package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
  71. package/lib/commonjs/classes/HMSPeersCache.js +229 -0
  72. package/lib/commonjs/classes/HMSPeersCache.js.map +1 -0
  73. package/lib/commonjs/classes/HMSPermissions.js.map +1 -1
  74. package/lib/commonjs/classes/HMSPublishSettings.js.map +1 -1
  75. package/lib/commonjs/classes/HMSRTCStats.js.map +1 -1
  76. package/lib/commonjs/classes/HMSRTCStatsReport.js.map +1 -1
  77. package/lib/commonjs/classes/HMSRTMPConfig.js.map +1 -1
  78. package/lib/commonjs/classes/HMSRemoteAudioStats.js.map +1 -1
  79. package/lib/commonjs/classes/HMSRemoteAudioTrack.js.map +1 -1
  80. package/lib/commonjs/classes/HMSRemotePeer.js +0 -1
  81. package/lib/commonjs/classes/HMSRemotePeer.js.map +1 -1
  82. package/lib/commonjs/classes/HMSRemoteVideoStats.js.map +1 -1
  83. package/lib/commonjs/classes/HMSRemoteVideoTrack.js.map +1 -1
  84. package/lib/commonjs/classes/HMSRole.js.map +1 -1
  85. package/lib/commonjs/classes/HMSRoleChangeRequest.js.map +1 -1
  86. package/lib/commonjs/classes/HMSRoom.js +79 -22
  87. package/lib/commonjs/classes/HMSRoom.js.map +1 -1
  88. package/lib/commonjs/classes/HMSRoomCache.js +128 -0
  89. package/lib/commonjs/classes/HMSRoomCache.js.map +1 -0
  90. package/lib/commonjs/classes/HMSRoomUpdate.js +4 -4
  91. package/lib/commonjs/classes/HMSRoomUpdate.js.map +1 -1
  92. package/lib/commonjs/classes/HMSRtmpStreamingState.js.map +1 -1
  93. package/lib/commonjs/classes/HMSRtmpVideoResolution.js.map +1 -1
  94. package/lib/commonjs/classes/HMSSDK.js +468 -21
  95. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  96. package/lib/commonjs/classes/HMSScreenBroadcastAudioReceiverNode.js.map +1 -1
  97. package/lib/commonjs/classes/HMSServerRecordingState.js.map +1 -1
  98. package/lib/commonjs/classes/HMSSimulcastLayerSettings.js.map +1 -1
  99. package/lib/commonjs/classes/HMSSimulcastSettings.js.map +1 -1
  100. package/lib/commonjs/classes/HMSSpeaker.js.map +1 -1
  101. package/lib/commonjs/classes/HMSSubscribeSettings.js.map +1 -1
  102. package/lib/commonjs/classes/HMSTrack.js.map +1 -1
  103. package/lib/commonjs/classes/HMSTrackSettings.js.map +1 -1
  104. package/lib/commonjs/classes/HMSTrackSettingsInitState.js +4 -4
  105. package/lib/commonjs/classes/HMSTrackSettingsInitState.js.map +1 -1
  106. package/lib/commonjs/classes/HMSTrackSource.js +4 -4
  107. package/lib/commonjs/classes/HMSTrackSource.js.map +1 -1
  108. package/lib/commonjs/classes/HMSTrackType.js +4 -4
  109. package/lib/commonjs/classes/HMSTrackType.js.map +1 -1
  110. package/lib/commonjs/classes/HMSTrackUpdate.js +4 -4
  111. package/lib/commonjs/classes/HMSTrackUpdate.js.map +1 -1
  112. package/lib/commonjs/classes/HMSUpdateListenerActions.js +5 -5
  113. package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
  114. package/lib/commonjs/classes/HMSVideoCodec.js +4 -4
  115. package/lib/commonjs/classes/HMSVideoCodec.js.map +1 -1
  116. package/lib/commonjs/classes/HMSVideoResolution.js.map +1 -1
  117. package/lib/commonjs/classes/HMSVideoSettings.js.map +1 -1
  118. package/lib/commonjs/classes/HMSVideoTrack.js.map +1 -1
  119. package/lib/commonjs/classes/HMSVideoTrackSettings.js.map +1 -1
  120. package/lib/commonjs/classes/HMSVideoViewMode.js +4 -4
  121. package/lib/commonjs/classes/HMSVideoViewMode.js.map +1 -1
  122. package/lib/commonjs/classes/HmsView.js +2 -1
  123. package/lib/commonjs/classes/HmsView.js.map +1 -1
  124. package/lib/commonjs/index.js.map +1 -1
  125. package/lib/module/classes/HMSAudioCodec.js +3 -3
  126. package/lib/module/classes/HMSAudioCodec.js.map +1 -1
  127. package/lib/module/classes/HMSAudioDevice.js +3 -3
  128. package/lib/module/classes/HMSAudioDevice.js.map +1 -1
  129. package/lib/module/classes/HMSAudioFilePlayerNode.js.map +1 -1
  130. package/lib/module/classes/HMSAudioMixerSource.js.map +1 -1
  131. package/lib/module/classes/HMSAudioMixingMode.js +3 -3
  132. package/lib/module/classes/HMSAudioMixingMode.js.map +1 -1
  133. package/lib/module/classes/HMSAudioMode.js +3 -3
  134. package/lib/module/classes/HMSAudioMode.js.map +1 -1
  135. package/lib/module/classes/HMSAudioNode.js +2 -1
  136. package/lib/module/classes/HMSAudioNode.js.map +1 -1
  137. package/lib/module/classes/HMSAudioSettings.js.map +1 -1
  138. package/lib/module/classes/HMSAudioTrack.js.map +1 -1
  139. package/lib/module/classes/HMSAudioTrackSettings.js.map +1 -1
  140. package/lib/module/classes/HMSBrowserRecordingState.js.map +1 -1
  141. package/lib/module/classes/HMSCameraFacing.js +3 -3
  142. package/lib/module/classes/HMSCameraFacing.js.map +1 -1
  143. package/lib/module/classes/HMSChangeTrackStateRequest.js.map +1 -1
  144. package/lib/module/classes/HMSConfig.js.map +1 -1
  145. package/lib/module/classes/HMSConstants.js +4 -0
  146. package/lib/module/classes/HMSConstants.js.map +1 -0
  147. package/lib/module/classes/HMSEncoder.js +21 -43
  148. package/lib/module/classes/HMSEncoder.js.map +1 -1
  149. package/lib/module/classes/HMSException.js.map +1 -1
  150. package/lib/module/classes/HMSHLSConfig.js.map +1 -1
  151. package/lib/module/classes/HMSHLSMeetingURLVariant.js.map +1 -1
  152. package/lib/module/classes/HMSHLSRecordingConfig.js.map +1 -1
  153. package/lib/module/classes/HMSHLSRecordingState.js.map +1 -1
  154. package/lib/module/classes/HMSHLSStreamingState.js.map +1 -1
  155. package/lib/module/classes/HMSHLSVariant.js.map +1 -1
  156. package/lib/module/classes/HMSHelper.js.map +1 -1
  157. package/lib/module/classes/HMSLocalAudioStats.js.map +1 -1
  158. package/lib/module/classes/HMSLocalAudioTrack.js.map +1 -1
  159. package/lib/module/classes/HMSLocalPeer.js +0 -1
  160. package/lib/module/classes/HMSLocalPeer.js.map +1 -1
  161. package/lib/module/classes/HMSLocalVideoStats.js.map +1 -1
  162. package/lib/module/classes/HMSLocalVideoTrack.js.map +1 -1
  163. package/lib/module/classes/HMSLogAlarmManager.js +3 -3
  164. package/lib/module/classes/HMSLogAlarmManager.js.map +1 -1
  165. package/lib/module/classes/HMSLogLevel.js +3 -3
  166. package/lib/module/classes/HMSLogLevel.js.map +1 -1
  167. package/lib/module/classes/HMSLogSettings.js.map +1 -1
  168. package/lib/module/classes/HMSLogger.js +17 -25
  169. package/lib/module/classes/HMSLogger.js.map +1 -1
  170. package/lib/module/classes/HMSMessage.js.map +1 -1
  171. package/lib/module/classes/HMSMessageRecipient.js.map +1 -1
  172. package/lib/module/classes/HMSMessageRecipientType.js +3 -3
  173. package/lib/module/classes/HMSMessageRecipientType.js.map +1 -1
  174. package/lib/module/classes/HMSMessageType.js +3 -3
  175. package/lib/module/classes/HMSMessageType.js.map +1 -1
  176. package/lib/module/classes/HMSMicNode.js.map +1 -1
  177. package/lib/module/classes/HMSNativeEventEmitter.js +1 -6
  178. package/lib/module/classes/HMSNativeEventEmitter.js.map +1 -1
  179. package/lib/module/classes/HMSNetworkQuality.js.map +1 -1
  180. package/lib/module/classes/HMSPIPListenerActions.js +3 -3
  181. package/lib/module/classes/HMSPIPListenerActions.js.map +1 -1
  182. package/lib/module/classes/HMSPeer.js +66 -19
  183. package/lib/module/classes/HMSPeer.js.map +1 -1
  184. package/lib/module/classes/HMSPeerUpdate.js +4 -3
  185. package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
  186. package/lib/module/classes/HMSPeersCache.js +216 -0
  187. package/lib/module/classes/HMSPeersCache.js.map +1 -0
  188. package/lib/module/classes/HMSPermissions.js.map +1 -1
  189. package/lib/module/classes/HMSPublishSettings.js.map +1 -1
  190. package/lib/module/classes/HMSRTCStats.js.map +1 -1
  191. package/lib/module/classes/HMSRTCStatsReport.js.map +1 -1
  192. package/lib/module/classes/HMSRTMPConfig.js.map +1 -1
  193. package/lib/module/classes/HMSRemoteAudioStats.js.map +1 -1
  194. package/lib/module/classes/HMSRemoteAudioTrack.js.map +1 -1
  195. package/lib/module/classes/HMSRemotePeer.js +0 -1
  196. package/lib/module/classes/HMSRemotePeer.js.map +1 -1
  197. package/lib/module/classes/HMSRemoteVideoStats.js.map +1 -1
  198. package/lib/module/classes/HMSRemoteVideoTrack.js.map +1 -1
  199. package/lib/module/classes/HMSRole.js.map +1 -1
  200. package/lib/module/classes/HMSRoleChangeRequest.js.map +1 -1
  201. package/lib/module/classes/HMSRoom.js +79 -22
  202. package/lib/module/classes/HMSRoom.js.map +1 -1
  203. package/lib/module/classes/HMSRoomCache.js +115 -0
  204. package/lib/module/classes/HMSRoomCache.js.map +1 -0
  205. package/lib/module/classes/HMSRoomUpdate.js +3 -3
  206. package/lib/module/classes/HMSRoomUpdate.js.map +1 -1
  207. package/lib/module/classes/HMSRtmpStreamingState.js.map +1 -1
  208. package/lib/module/classes/HMSRtmpVideoResolution.js.map +1 -1
  209. package/lib/module/classes/HMSSDK.js +468 -21
  210. package/lib/module/classes/HMSSDK.js.map +1 -1
  211. package/lib/module/classes/HMSScreenBroadcastAudioReceiverNode.js.map +1 -1
  212. package/lib/module/classes/HMSServerRecordingState.js.map +1 -1
  213. package/lib/module/classes/HMSSimulcastLayerSettings.js.map +1 -1
  214. package/lib/module/classes/HMSSimulcastSettings.js.map +1 -1
  215. package/lib/module/classes/HMSSpeaker.js.map +1 -1
  216. package/lib/module/classes/HMSSubscribeSettings.js.map +1 -1
  217. package/lib/module/classes/HMSTrack.js.map +1 -1
  218. package/lib/module/classes/HMSTrackSettings.js.map +1 -1
  219. package/lib/module/classes/HMSTrackSettingsInitState.js +3 -3
  220. package/lib/module/classes/HMSTrackSettingsInitState.js.map +1 -1
  221. package/lib/module/classes/HMSTrackSource.js +3 -3
  222. package/lib/module/classes/HMSTrackSource.js.map +1 -1
  223. package/lib/module/classes/HMSTrackType.js +3 -3
  224. package/lib/module/classes/HMSTrackType.js.map +1 -1
  225. package/lib/module/classes/HMSTrackUpdate.js +3 -3
  226. package/lib/module/classes/HMSTrackUpdate.js.map +1 -1
  227. package/lib/module/classes/HMSUpdateListenerActions.js +4 -4
  228. package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
  229. package/lib/module/classes/HMSVideoCodec.js +3 -3
  230. package/lib/module/classes/HMSVideoCodec.js.map +1 -1
  231. package/lib/module/classes/HMSVideoResolution.js.map +1 -1
  232. package/lib/module/classes/HMSVideoSettings.js.map +1 -1
  233. package/lib/module/classes/HMSVideoTrack.js.map +1 -1
  234. package/lib/module/classes/HMSVideoTrackSettings.js.map +1 -1
  235. package/lib/module/classes/HMSVideoViewMode.js +3 -3
  236. package/lib/module/classes/HMSVideoViewMode.js.map +1 -1
  237. package/lib/module/classes/HmsView.js +2 -1
  238. package/lib/module/classes/HmsView.js.map +1 -1
  239. package/lib/typescript/classes/HMSConstants.d.ts +3 -0
  240. package/lib/typescript/classes/HMSEncoder.d.ts +7 -6
  241. package/lib/typescript/classes/HMSLocalPeer.d.ts +0 -14
  242. package/lib/typescript/classes/HMSLogger.d.ts +1 -7
  243. package/lib/typescript/classes/HMSPeer.d.ts +12 -18
  244. package/lib/typescript/classes/HMSPeerUpdate.d.ts +1 -0
  245. package/lib/typescript/classes/HMSPeersCache.d.ts +17 -0
  246. package/lib/typescript/classes/HMSRemotePeer.d.ts +0 -14
  247. package/lib/typescript/classes/HMSRoom.d.ts +11 -22
  248. package/lib/typescript/classes/HMSRoomCache.d.ts +16 -0
  249. package/lib/typescript/classes/HMSSDK.d.ts +1 -1
  250. package/lib/typescript/classes/HMSUpdateListenerActions.d.ts +1 -1
  251. package/package.json +1 -1
  252. package/sdk-versions.json +3 -3
  253. package/src/classes/HMSAudioNode.ts +3 -1
  254. package/src/classes/HMSConstants.ts +3 -0
  255. package/src/classes/HMSEncoder.ts +24 -69
  256. package/src/classes/HMSLocalPeer.ts +0 -15
  257. package/src/classes/HMSLogger.ts +20 -19
  258. package/src/classes/HMSNativeEventEmitter.ts +35 -12
  259. package/src/classes/HMSPeer.ts +133 -34
  260. package/src/classes/HMSPeerUpdate.ts +9 -0
  261. package/src/classes/HMSPeersCache.ts +252 -0
  262. package/src/classes/HMSRemotePeer.ts +0 -16
  263. package/src/classes/HMSRoom.ts +141 -37
  264. package/src/classes/HMSRoomCache.ts +157 -0
  265. package/src/classes/HMSSDK.tsx +57 -24
  266. package/src/classes/HMSUpdateListenerActions.ts +1 -1
  267. package/src/classes/HmsView.tsx +2 -1
@@ -0,0 +1,252 @@
1
+ import { NativeModules } from 'react-native';
2
+ import type { HMSPeer } from './HMSPeer';
3
+ import { HMSEncoder } from './HMSEncoder';
4
+ import { HMSPeerUpdate } from './HMSPeerUpdate';
5
+ import { HMSTrackUpdate } from './HMSTrackUpdate';
6
+ import type { HMSTrack } from './HMSTrack';
7
+ import { HMSTrackType } from './HMSTrackType';
8
+ import { HMSTrackSource } from './HMSTrackSource';
9
+
10
+ const { HMSManager } = NativeModules;
11
+
12
+ export let hmsPeersCache: HMSPeersCache | undefined;
13
+
14
+ export const getHmsPeersCache = () => {
15
+ return hmsPeersCache;
16
+ };
17
+
18
+ export const setHmsPeersCache = (_hmsPeersCache: HMSPeersCache) => {
19
+ hmsPeersCache = _hmsPeersCache;
20
+ };
21
+
22
+ export const clearHmsPeersCache = () => {
23
+ if (hmsPeersCache) {
24
+ hmsPeersCache.cleanup();
25
+ }
26
+ hmsPeersCache = undefined;
27
+ };
28
+
29
+ export type HMSPeerCacheProps = Partial<
30
+ Omit<HMSPeer, 'peerID' | 'customerDescription'>
31
+ >;
32
+
33
+ export class HMSPeersCache {
34
+ private _data = new Map<string, HMSPeerCacheProps>();
35
+ private id: string;
36
+
37
+ constructor(id: string) {
38
+ this.id = id;
39
+ }
40
+
41
+ getProperty<T extends keyof HMSPeerCacheProps>(
42
+ peerId: string,
43
+ property: T
44
+ ): HMSPeerCacheProps[T] | undefined {
45
+ const peerObj = this._data.get(peerId);
46
+
47
+ if (peerObj && property in peerObj) {
48
+ return peerObj[property];
49
+ }
50
+
51
+ const encodedValue = getPeerPropertyFromNative(this.id, peerId, property);
52
+
53
+ if (!peerObj) {
54
+ this._data.set(peerId, { [property]: encodedValue });
55
+ } else {
56
+ peerObj[property] = encodedValue;
57
+ }
58
+
59
+ return encodedValue;
60
+ }
61
+
62
+ updatePeerCache(
63
+ peerId: string,
64
+ data: Partial<Record<keyof HMSPeerCacheProps | 'track', any>>,
65
+ updateType?: HMSPeerUpdate | HMSTrackUpdate
66
+ ) {
67
+ const peerObj = this._data.get(peerId);
68
+
69
+ if (updateType === HMSPeerUpdate.PEER_LEFT) {
70
+ this._data.delete(peerId);
71
+ return;
72
+ }
73
+
74
+ let updatedObj = { ...peerObj };
75
+
76
+ switch (updateType) {
77
+ case HMSTrackUpdate.TRACK_ADDED: {
78
+ const track = data.track as HMSTrack;
79
+
80
+ if (track.source === HMSTrackSource.REGULAR) {
81
+ if (track.type === HMSTrackType.VIDEO) {
82
+ updatedObj.videoTrack = { ...track, isDegraded: false };
83
+ } else if (track.type === HMSTrackType.AUDIO) {
84
+ updatedObj.audioTrack = track;
85
+ }
86
+ } else {
87
+ if (Array.isArray(updatedObj.auxiliaryTracks)) {
88
+ updatedObj.auxiliaryTracks.push(track);
89
+ } else {
90
+ updatedObj.auxiliaryTracks = [track];
91
+ }
92
+ }
93
+ break;
94
+ }
95
+ case HMSTrackUpdate.TRACK_REMOVED: {
96
+ const track = data.track as HMSTrack;
97
+
98
+ if (track.source === HMSTrackSource.REGULAR) {
99
+ if (track.type === HMSTrackType.VIDEO) {
100
+ updatedObj.videoTrack = undefined;
101
+ } else if (track.type === HMSTrackType.AUDIO) {
102
+ updatedObj.audioTrack = undefined;
103
+ }
104
+ } else if (Array.isArray(updatedObj.auxiliaryTracks)) {
105
+ updatedObj = {
106
+ ...updatedObj,
107
+ auxiliaryTracks: updatedObj.auxiliaryTracks.filter(
108
+ (auxiliaryTrack) => auxiliaryTrack.trackId !== track.trackId
109
+ ),
110
+ };
111
+ }
112
+ break;
113
+ }
114
+ case HMSTrackUpdate.TRACK_MUTED:
115
+ case HMSTrackUpdate.TRACK_UNMUTED: {
116
+ const track = data.track as HMSTrack;
117
+
118
+ if (track.source === HMSTrackSource.REGULAR) {
119
+ if (track.type === HMSTrackType.VIDEO) {
120
+ updatedObj.videoTrack = {
121
+ ...track,
122
+ isDegraded: updatedObj.videoTrack?.isDegraded || false,
123
+ };
124
+ } else if (track.type === HMSTrackType.AUDIO) {
125
+ updatedObj.audioTrack = track;
126
+ }
127
+ } else {
128
+ if (Array.isArray(updatedObj.auxiliaryTracks)) {
129
+ updatedObj = {
130
+ ...updatedObj,
131
+ auxiliaryTracks: updatedObj.auxiliaryTracks.map(
132
+ (auxiliaryTrack) =>
133
+ auxiliaryTrack.trackId === track.trackId
134
+ ? track
135
+ : auxiliaryTrack
136
+ ),
137
+ };
138
+ } else {
139
+ updatedObj.auxiliaryTracks = [track];
140
+ }
141
+ }
142
+ break;
143
+ }
144
+ case HMSTrackUpdate.TRACK_DEGRADED:
145
+ case HMSTrackUpdate.TRACK_RESTORED: {
146
+ const track = data.track as HMSTrack;
147
+
148
+ if (track.source === HMSTrackSource.REGULAR) {
149
+ if (track.type === HMSTrackType.VIDEO) {
150
+ updatedObj.videoTrack = {
151
+ ...track,
152
+ isDegraded: updateType === HMSTrackUpdate.TRACK_DEGRADED,
153
+ };
154
+ } else if (track.type === HMSTrackType.AUDIO) {
155
+ updatedObj.audioTrack = track;
156
+ }
157
+ } else {
158
+ if (Array.isArray(updatedObj.auxiliaryTracks)) {
159
+ updatedObj = {
160
+ ...updatedObj,
161
+ auxiliaryTracks: updatedObj.auxiliaryTracks.map(
162
+ (auxiliaryTrack) => {
163
+ if (auxiliaryTrack.trackId === track.trackId) {
164
+ return {
165
+ ...auxiliaryTrack,
166
+ isDegraded: updateType === HMSTrackUpdate.TRACK_DEGRADED,
167
+ };
168
+ }
169
+
170
+ return auxiliaryTrack;
171
+ }
172
+ ),
173
+ };
174
+ } else {
175
+ updatedObj.auxiliaryTracks = [track];
176
+ }
177
+ }
178
+ break;
179
+ }
180
+ case HMSPeerUpdate.ROLE_CHANGED: {
181
+ updatedObj.role = HMSEncoder.encodeHmsRole(data.role);
182
+ break;
183
+ }
184
+ case HMSPeerUpdate.NETWORK_QUALITY_UPDATED: {
185
+ updatedObj.networkQuality = HMSEncoder.encodeHMSNetworkQuality(
186
+ data.networkQuality
187
+ );
188
+ break;
189
+ }
190
+ case HMSPeerUpdate.METADATA_CHANGED:
191
+ case HMSPeerUpdate.NAME_CHANGED:
192
+ case HMSPeerUpdate.PEER_JOINED:
193
+ case HMSPeerUpdate.ROLE_CHANGED: {
194
+ updatedObj = { ...updatedObj, ...data };
195
+ break;
196
+ }
197
+ default: {
198
+ updatedObj = { ...updatedObj, ...data };
199
+ break;
200
+ }
201
+ }
202
+
203
+ if (Object.keys(updatedObj).length > 0) {
204
+ this._data.set(peerId, updatedObj);
205
+ }
206
+ }
207
+
208
+ cleanup() {
209
+ this._data.clear();
210
+ }
211
+ }
212
+
213
+ export function getPeerPropertyFromNative<T extends keyof HMSPeerCacheProps>(
214
+ id: string,
215
+ peerId: string,
216
+ property: T
217
+ ): HMSPeerCacheProps[T] {
218
+ const data: any = HMSManager.getPeerProperty({
219
+ id,
220
+ peerId,
221
+ property,
222
+ });
223
+
224
+ let value;
225
+
226
+ if (property === 'role') {
227
+ value = data ? HMSEncoder.encodeHmsRole(data.role) : undefined;
228
+ } else if (property === 'networkQuality') {
229
+ value = data
230
+ ? HMSEncoder.encodeHMSNetworkQuality(data.networkQuality)
231
+ : undefined;
232
+ } else if (property === 'audioTrack') {
233
+ value = data
234
+ ? HMSEncoder.encodeHmsAudioTrack(data.audioTrack, id)
235
+ : undefined;
236
+ } else if (property === 'videoTrack') {
237
+ value = data
238
+ ? HMSEncoder.encodeHmsVideoTrack(data.videoTrack, id)
239
+ : undefined;
240
+ } else if (property === 'auxiliaryTracks') {
241
+ value =
242
+ data && Array.isArray(data.auxiliaryTracks)
243
+ ? HMSEncoder.encodeHmsAuxiliaryTracks(data.auxiliaryTracks, id)
244
+ : undefined;
245
+ } else if (property === 'name') {
246
+ value = data?.[property] || '';
247
+ } else {
248
+ value = data ? data[property] : undefined;
249
+ }
250
+
251
+ return value;
252
+ }
@@ -1,11 +1,6 @@
1
- import type { HMSAudioTrack } from './HMSAudioTrack';
2
- import type { HMSNetworkQuality } from './HMSNetworkQuality';
3
1
  import { HMSPeer } from './HMSPeer';
4
2
  import { HMSRemoteAudioTrack } from './HMSRemoteAudioTrack';
5
3
  import { HMSRemoteVideoTrack } from './HMSRemoteVideoTrack';
6
- import type { HMSRole } from './HMSRole';
7
- import type { HMSTrack } from './HMSTrack';
8
- import type { HMSVideoTrack } from './HMSVideoTrack';
9
4
 
10
5
  export class HMSRemotePeer extends HMSPeer {
11
6
  private remoteAudio?: HMSRemoteAudioTrack;
@@ -21,16 +16,7 @@ export class HMSRemotePeer extends HMSPeer {
21
16
 
22
17
  constructor(params: {
23
18
  peerID: string;
24
- name: string;
25
- isLocal?: boolean;
26
- customerUserID?: string;
27
19
  customerDescription?: string;
28
- metadata?: string;
29
- audioTrack?: HMSAudioTrack;
30
- videoTrack?: HMSVideoTrack;
31
- role?: HMSRole;
32
- networkQuality?: HMSNetworkQuality;
33
- auxiliaryTracks?: HMSTrack[];
34
20
  remoteAudioTrackData?: {
35
21
  trackId: string;
36
22
  source?: number | string;
@@ -50,8 +36,6 @@ export class HMSRemotePeer extends HMSPeer {
50
36
  };
51
37
  }) {
52
38
  super(params);
53
- this.isLocal = false;
54
-
55
39
  if (params.remoteAudioTrackData) {
56
40
  this.remoteAudio = new HMSRemoteAudioTrack(params.remoteAudioTrackData);
57
41
  }
@@ -5,46 +5,150 @@ import type { HMSBrowserRecordingState } from './HMSBrowserRecordingState';
5
5
  import type { HMSHLSStreamingState } from './HMSHLSStreamingState';
6
6
  import type { HMSHLSRecordingState } from './HMSHLSRecordingState';
7
7
  import type { HMSLocalPeer } from './HMSLocalPeer';
8
+ import { getHmsRoomCache, getHMSRoomPropertyFromNative } from './HMSRoomCache';
9
+ import { HMSConstants } from './HMSConstants';
8
10
 
9
11
  export class HMSRoom {
10
12
  id: string;
11
- sessionId: string;
12
- name: string;
13
- metaData?: string;
14
- peers: HMSPeer[];
15
- browserRecordingState: HMSBrowserRecordingState;
16
- rtmpHMSRtmpStreamingState: HMSRtmpStreamingState;
17
- serverRecordingState: HMSServerRecordingState;
18
- hlsStreamingState: HMSHLSStreamingState;
19
- hlsRecordingState?: HMSHLSRecordingState;
20
- peerCount: number;
21
- localPeer: HMSLocalPeer;
22
-
23
- constructor(params: {
24
- id: string;
25
- sessionId: string;
26
- name: string;
27
- metaData?: string;
28
- peers: HMSPeer[];
29
- browserRecordingState: HMSBrowserRecordingState;
30
- rtmpHMSRtmpStreamingState: HMSRtmpStreamingState;
31
- serverRecordingState: HMSServerRecordingState;
32
- hlsStreamingState: HMSHLSStreamingState;
33
- hlsRecordingState?: HMSHLSRecordingState;
34
- peerCount: number;
35
- localPeer: HMSLocalPeer;
36
- }) {
13
+
14
+ constructor(params: { id: string }) {
37
15
  this.id = params.id;
38
- this.sessionId = params.sessionId;
39
- this.name = params.name;
40
- this.metaData = params.metaData;
41
- this.peers = params.peers;
42
- this.browserRecordingState = params.browserRecordingState;
43
- this.rtmpHMSRtmpStreamingState = params.rtmpHMSRtmpStreamingState;
44
- this.serverRecordingState = params.serverRecordingState;
45
- this.hlsStreamingState = params.hlsStreamingState;
46
- this.hlsRecordingState = params.hlsRecordingState;
47
- this.peerCount = params.peerCount;
48
- this.localPeer = params.localPeer;
16
+ }
17
+
18
+ get sessionId(): string {
19
+ const hmsRoomCache = getHmsRoomCache();
20
+
21
+ if (hmsRoomCache) {
22
+ return hmsRoomCache.getProperty('sessionId');
23
+ }
24
+
25
+ return getHMSRoomPropertyFromNative(
26
+ HMSConstants.DEFAULT_SDK_ID,
27
+ 'sessionId'
28
+ );
29
+ }
30
+
31
+ get name(): string {
32
+ const hmsRoomCache = getHmsRoomCache();
33
+
34
+ if (hmsRoomCache) {
35
+ return hmsRoomCache.getProperty('name');
36
+ }
37
+
38
+ return getHMSRoomPropertyFromNative(HMSConstants.DEFAULT_SDK_ID, 'name');
39
+ }
40
+
41
+ get metaData(): string | undefined {
42
+ const hmsRoomCache = getHmsRoomCache();
43
+
44
+ if (hmsRoomCache) {
45
+ return hmsRoomCache.getProperty('metaData');
46
+ }
47
+
48
+ return getHMSRoomPropertyFromNative(
49
+ HMSConstants.DEFAULT_SDK_ID,
50
+ 'metaData'
51
+ );
52
+ }
53
+
54
+ get peers(): HMSPeer[] {
55
+ const hmsRoomCache = getHmsRoomCache();
56
+
57
+ if (hmsRoomCache) {
58
+ return hmsRoomCache.getProperty('peers');
59
+ }
60
+
61
+ return getHMSRoomPropertyFromNative(HMSConstants.DEFAULT_SDK_ID, 'peers');
62
+ }
63
+
64
+ get browserRecordingState(): HMSBrowserRecordingState {
65
+ const hmsRoomCache = getHmsRoomCache();
66
+
67
+ if (hmsRoomCache) {
68
+ return hmsRoomCache.getProperty('browserRecordingState');
69
+ }
70
+
71
+ return getHMSRoomPropertyFromNative(
72
+ HMSConstants.DEFAULT_SDK_ID,
73
+ 'browserRecordingState'
74
+ );
75
+ }
76
+
77
+ get rtmpHMSRtmpStreamingState(): HMSRtmpStreamingState {
78
+ const hmsRoomCache = getHmsRoomCache();
79
+
80
+ if (hmsRoomCache) {
81
+ return hmsRoomCache.getProperty('rtmpHMSRtmpStreamingState');
82
+ }
83
+
84
+ return getHMSRoomPropertyFromNative(
85
+ HMSConstants.DEFAULT_SDK_ID,
86
+ 'rtmpHMSRtmpStreamingState'
87
+ );
88
+ }
89
+
90
+ get serverRecordingState(): HMSServerRecordingState {
91
+ const hmsRoomCache = getHmsRoomCache();
92
+
93
+ if (hmsRoomCache) {
94
+ return hmsRoomCache.getProperty('serverRecordingState');
95
+ }
96
+
97
+ return getHMSRoomPropertyFromNative(
98
+ HMSConstants.DEFAULT_SDK_ID,
99
+ 'serverRecordingState'
100
+ );
101
+ }
102
+
103
+ get hlsStreamingState(): HMSHLSStreamingState {
104
+ const hmsRoomCache = getHmsRoomCache();
105
+
106
+ if (hmsRoomCache) {
107
+ return hmsRoomCache.getProperty('hlsStreamingState');
108
+ }
109
+
110
+ return getHMSRoomPropertyFromNative(
111
+ HMSConstants.DEFAULT_SDK_ID,
112
+ 'hlsStreamingState'
113
+ );
114
+ }
115
+
116
+ get hlsRecordingState(): HMSHLSRecordingState | undefined {
117
+ const hmsRoomCache = getHmsRoomCache();
118
+
119
+ if (hmsRoomCache) {
120
+ return hmsRoomCache.getProperty('hlsRecordingState');
121
+ }
122
+
123
+ return getHMSRoomPropertyFromNative(
124
+ HMSConstants.DEFAULT_SDK_ID,
125
+ 'hlsRecordingState'
126
+ );
127
+ }
128
+
129
+ get peerCount(): number {
130
+ const hmsRoomCache = getHmsRoomCache();
131
+
132
+ if (hmsRoomCache) {
133
+ return hmsRoomCache.getProperty('peerCount');
134
+ }
135
+
136
+ return getHMSRoomPropertyFromNative(
137
+ HMSConstants.DEFAULT_SDK_ID,
138
+ 'peerCount'
139
+ );
140
+ }
141
+
142
+ get localPeer(): HMSLocalPeer {
143
+ const hmsRoomCache = getHmsRoomCache();
144
+
145
+ if (hmsRoomCache) {
146
+ return hmsRoomCache.getProperty('localPeer');
147
+ }
148
+
149
+ return getHMSRoomPropertyFromNative(
150
+ HMSConstants.DEFAULT_SDK_ID,
151
+ 'localPeer'
152
+ );
49
153
  }
50
154
  }
@@ -0,0 +1,157 @@
1
+ import { NativeModules } from 'react-native';
2
+ import type { HMSRoom } from './HMSRoom';
3
+ import { HMSEncoder } from './HMSEncoder';
4
+ import { HMSRoomUpdate } from './HMSRoomUpdate';
5
+
6
+ const { HMSManager } = NativeModules;
7
+
8
+ export let hmsRoomCache: HMSRoomCache | undefined;
9
+
10
+ export const getHmsRoomCache = () => hmsRoomCache;
11
+
12
+ export const setHmsRoomCache = (_hmsRoomCache: HMSRoomCache) => {
13
+ hmsRoomCache = _hmsRoomCache;
14
+ };
15
+
16
+ export const clearHmsRoomCache = () => {
17
+ if (hmsRoomCache) {
18
+ hmsRoomCache.cleanup();
19
+ }
20
+ hmsRoomCache = undefined;
21
+ };
22
+
23
+ export type HMSRoomCacheProps = Partial<Omit<HMSRoom, 'id'>>;
24
+
25
+ export class HMSRoomCache {
26
+ private _data = new Map<
27
+ keyof HMSRoomCacheProps,
28
+ HMSRoomCacheProps[keyof HMSRoomCacheProps]
29
+ >();
30
+ private id: string;
31
+
32
+ constructor(id: string) {
33
+ this.id = id;
34
+ }
35
+
36
+ getProperty<T extends keyof Required<HMSRoomCacheProps>>(
37
+ property: T
38
+ ): Required<HMSRoomCacheProps>[T] {
39
+ const value: any = this._data.get(property);
40
+
41
+ if (value) {
42
+ return value;
43
+ }
44
+
45
+ const encodedValue = getHMSRoomPropertyFromNative(this.id, property);
46
+
47
+ this._data.set(property, encodedValue);
48
+
49
+ return encodedValue;
50
+ }
51
+
52
+ updateRoomCache(
53
+ data: Record<keyof HMSRoomCacheProps, any>,
54
+ updateType?: HMSRoomUpdate
55
+ ) {
56
+ switch (updateType) {
57
+ case HMSRoomUpdate.ROOM_MUTED:
58
+ case HMSRoomUpdate.ROOM_UNMUTED: {
59
+ break;
60
+ }
61
+ case HMSRoomUpdate.SERVER_RECORDING_STATE_UPDATED: {
62
+ this._data.set(
63
+ 'serverRecordingState',
64
+ HMSEncoder.encodeServerRecordingState(data.serverRecordingState)
65
+ );
66
+ break;
67
+ }
68
+ case HMSRoomUpdate.RTMP_STREAMING_STATE_UPDATED: {
69
+ this._data.set(
70
+ 'rtmpHMSRtmpStreamingState',
71
+ HMSEncoder.encodeRTMPStreamingState(data.rtmpHMSRtmpStreamingState)
72
+ );
73
+ break;
74
+ }
75
+ case HMSRoomUpdate.BROWSER_RECORDING_STATE_UPDATED: {
76
+ this._data.set(
77
+ 'browserRecordingState',
78
+ HMSEncoder.encodeBrowserRecordingState(data.browserRecordingState)
79
+ );
80
+ break;
81
+ }
82
+ case HMSRoomUpdate.HLS_STREAMING_STATE_UPDATED: {
83
+ this._data.set(
84
+ 'hlsStreamingState',
85
+ HMSEncoder.encodeHLSStreamingState(data.hlsStreamingState)
86
+ );
87
+ break;
88
+ }
89
+ case HMSRoomUpdate.HLS_RECORDING_STATE_UPDATED: {
90
+ this._data.set(
91
+ 'hlsRecordingState',
92
+ HMSEncoder.encodeHLSRecordingState(data.hlsRecordingState)
93
+ );
94
+ break;
95
+ }
96
+ default: {
97
+ for (const key in data) {
98
+ const property = key as keyof HMSRoomCacheProps;
99
+
100
+ if (Object.prototype.hasOwnProperty.call(data, property)) {
101
+ const value = encodeHMSRoomProperty(this.id, property, data);
102
+ this._data.set(property, value);
103
+ }
104
+ }
105
+ break;
106
+ }
107
+ }
108
+ }
109
+
110
+ cleanup() {
111
+ this._data.clear();
112
+ }
113
+ }
114
+
115
+ export function getHMSRoomPropertyFromNative<T extends keyof HMSRoomCacheProps>(
116
+ id: string,
117
+ property: T
118
+ ): Required<HMSRoomCacheProps>[T] {
119
+ const data: any = HMSManager.getRoomProperty({
120
+ id,
121
+ property,
122
+ });
123
+
124
+ if (!data) return data;
125
+
126
+ const value = encodeHMSRoomProperty(id, property, data);
127
+
128
+ return value;
129
+ }
130
+
131
+ function encodeHMSRoomProperty<T extends keyof HMSRoomCacheProps>(
132
+ id: string,
133
+ property: T,
134
+ data: Record<string, any>
135
+ ): Required<HMSRoomCacheProps>[T] {
136
+ let value;
137
+
138
+ if (property === 'peers') {
139
+ value = HMSEncoder.encodeHmsPeers(data.peers);
140
+ } else if (property === 'browserRecordingState') {
141
+ value = HMSEncoder.encodeBrowserRecordingState(data.browserRecordingState);
142
+ } else if (property === 'rtmpHMSRtmpStreamingState') {
143
+ value = HMSEncoder.encodeRTMPStreamingState(data.rtmpHMSRtmpStreamingState);
144
+ } else if (property === 'serverRecordingState') {
145
+ value = HMSEncoder.encodeServerRecordingState(data.serverRecordingState);
146
+ } else if (property === 'hlsStreamingState') {
147
+ value = HMSEncoder.encodeHLSStreamingState(data.hlsStreamingState);
148
+ } else if (property === 'hlsRecordingState') {
149
+ value = HMSEncoder.encodeHLSRecordingState(data.hlsRecordingState);
150
+ } else if (property === 'localPeer') {
151
+ value = HMSEncoder.encodeHmsLocalPeer(data.localPeer, id);
152
+ } else {
153
+ value = data[property];
154
+ }
155
+
156
+ return value;
157
+ }