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