From 30487265282a16cd5f711e6d10bf7c9e7fd0f12b Mon Sep 17 00:00:00 2001 From: Melonai Date: Sat, 5 Jun 2021 17:50:09 +0200 Subject: WebRTC connection between share and request works --- assets/src/network/transfer/transfer.ts | 40 +++++++++++++++++++++++---------- 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/assets/src/network/transfer/transfer.ts b/assets/src/network/transfer/transfer.ts index 1cc029b..25511d5 100644 --- a/assets/src/network/transfer/transfer.ts +++ b/assets/src/network/transfer/transfer.ts @@ -1,4 +1,4 @@ -import { onWithToken, send } from "../channel/connection"; +import { on, onWithToken, send } from "../channel/connection"; import type { UnregisterHandler } from "../channel/messages/handler"; import type { ShareAcceptedMessage, @@ -76,9 +76,17 @@ export async function answer( } }; + const unregisterIce = on( + "ice_candidate", + (message: RequestIceCandidateMessage) => + onIncomingIceCandidate(transfer, message) + ); + + unregisterIceOnComplete(transfer, unregisterIce); + send("accept_share", { - sdp: offer.sdp, - type: offer.type, + sdp: answer.sdp, + type: answer.type, }); return transfer; @@ -91,7 +99,7 @@ function createTransfer(type: TransferType): Transfer { id: 0, }); - channel.onopen = e => console.log("ooooyeeee"); + // TODO: Send data after channel was opened. return { pc, @@ -106,7 +114,9 @@ function onShareAccepted( unregister: UnregisterHandler ) { const token = message.token; - transfer.pc.setRemoteDescription(message); + + const answerDescription = new RTCSessionDescription(message); + transfer.pc.setRemoteDescription(answerDescription); const unregisterIce = onWithToken( "ice_candidate", @@ -115,13 +125,7 @@ function onShareAccepted( onIncomingIceCandidate(transfer, message) ); - transfer.pc.onicegatheringstatechange = event => { - const connection = event.target as any; - console.log(connection.iceGatheringState); - if (connection.iceGatheringState === "complete") { - unregisterIce(); - } - }; + unregisterIceOnComplete(transfer, unregisterIce); unregister(); } @@ -132,3 +136,15 @@ function onIncomingIceCandidate( ) { transfer.pc.addIceCandidate(message.candidate); } + +function unregisterIceOnComplete( + transfer: Transfer, + unregister: UnregisterHandler +) { + transfer.pc.onicegatheringstatechange = event => { + const connection = event.target as any; + if (connection.iceGatheringState === "complete") { + unregister(); + } + }; +} -- cgit 1.4.1