Vitalik
3 months ago
44 changed files with 181 additions and 282 deletions
@ -1,55 +0,0 @@
@@ -1,55 +0,0 @@
|
||||
import messaging from '@react-native-firebase/messaging' |
||||
import { Alert } from 'react-native' |
||||
import RNCallKeep from 'react-native-callkeep' |
||||
|
||||
// messaging().setBackgroundMessageHandler(async message => {
|
||||
// const data = message.data as any
|
||||
|
||||
// if (!data) {
|
||||
// return
|
||||
// }
|
||||
|
||||
// if (data?.type === 'callAnswered') {
|
||||
// RNCallKeep.endAllCalls()
|
||||
// return
|
||||
// }
|
||||
|
||||
// if (data?.uuid) {
|
||||
// RNCallKeep.displayIncomingCall(
|
||||
// data.uuid,
|
||||
// data.handle,
|
||||
// data.callerName,
|
||||
// 'number',
|
||||
// false,
|
||||
// )
|
||||
// }
|
||||
// })
|
||||
|
||||
messaging().onMessage(async message => { |
||||
try { |
||||
// console.log(message)
|
||||
// Alert.alert(JSON.stringify(message))
|
||||
const data = message.data as any |
||||
|
||||
// if (!data) {
|
||||
// return
|
||||
// }
|
||||
|
||||
// if (data?.type === 'callAnswered') {
|
||||
// RNCallKeep.endAllCalls()
|
||||
// return
|
||||
// }
|
||||
|
||||
// if (data?.uuid) {
|
||||
// RNCallKeep.displayIncomingCall(
|
||||
// data.uuid,
|
||||
// data.handle,
|
||||
// data.callerName,
|
||||
// 'number',
|
||||
// false,
|
||||
// )
|
||||
// }
|
||||
} catch (e) { |
||||
console.log(e) |
||||
} |
||||
}) |
@ -0,0 +1,66 @@
@@ -0,0 +1,66 @@
|
||||
import { RTCIceCandidate, RTCPeerConnection } from 'react-native-webrtc' |
||||
import { iceCandidatesService } from './ice-candidates.service' |
||||
|
||||
export class IceCandidateHandler { |
||||
private peerConnection: RTCPeerConnection |
||||
private iceCandidatesService = iceCandidatesService |
||||
private icecandidates: RTCIceCandidate[] = [] |
||||
private sendIceCandidatesInterval: NodeJS.Timeout | null = null |
||||
private counter = 0 |
||||
|
||||
constructor(peerConnection: RTCPeerConnection, store: any) { |
||||
this.peerConnection = peerConnection |
||||
|
||||
// Регістрація обробника події icecandidate
|
||||
this.peerConnection.addEventListener( |
||||
'icecandidate', |
||||
this.handleIceCandidate.bind(this), |
||||
) |
||||
} |
||||
|
||||
// Функція для періодичного виклику sendIcecandidates
|
||||
private startSendingIceCandidates(): void { |
||||
if (!this.sendIceCandidatesInterval) { |
||||
this.sendIceCandidatesInterval = setInterval(() => { |
||||
if (this.icecandidates.length > 0) { |
||||
this.sendIcecandidates() |
||||
} |
||||
this.counter++ |
||||
if (this.counter > 10) { |
||||
this.counter = 0 |
||||
this.stopSendingIceCandidates() |
||||
} |
||||
}, 500) // 1 секунд
|
||||
} |
||||
} |
||||
|
||||
// Функція для зупинки періодичного виклику sendIcecandidates
|
||||
private stopSendingIceCandidates(): void { |
||||
if (this.sendIceCandidatesInterval) { |
||||
clearInterval(this.sendIceCandidatesInterval) |
||||
this.sendIceCandidatesInterval = null |
||||
} |
||||
} |
||||
|
||||
// Обробка події icecandidate
|
||||
private handleIceCandidate(event: any): void { |
||||
if (event.candidate === null) { |
||||
this.sendIcecandidates() |
||||
this.stopSendingIceCandidates() |
||||
return |
||||
} |
||||
|
||||
this.icecandidates.push(event.candidate) |
||||
this.startSendingIceCandidates() |
||||
} |
||||
|
||||
// Функція для відправки кандидатів
|
||||
private sendIcecandidates(): void { |
||||
// Реалізація відправлення кандидатів (наприклад, через WebSocket або інший механізм)
|
||||
console.log('Sending ICE candidates:', this.icecandidates) |
||||
// Очищення списку кандидатів після відправлення
|
||||
this.iceCandidatesService.onLocalIceCandidate(this.icecandidates) |
||||
|
||||
this.icecandidates = [] |
||||
} |
||||
} |
@ -0,0 +1,16 @@
@@ -0,0 +1,16 @@
|
||||
import { SocketIo } from '@/services/system' |
||||
import { CallRoot } from '../call-root.service' |
||||
|
||||
class IceCandidatesService extends CallRoot { |
||||
public onLocalIceCandidate(candidates: any[]) { |
||||
const socketIo = SocketIo.get() |
||||
const callId = this.store.callId |
||||
|
||||
socketIo.emit('iceCandidate', { |
||||
callId: callId, |
||||
iceCandidates: candidates, |
||||
}) |
||||
} |
||||
} |
||||
|
||||
export const iceCandidatesService = new IceCandidatesService() |
Loading…
Reference in new issue