diff options
| author | Melonai <einebeere@gmail.com> | 2021-06-13 23:38:21 +0200 |
|---|---|---|
| committer | Melonai <einebeere@gmail.com> | 2021-06-13 23:38:21 +0200 |
| commit | 29573488ada5c5b1f291f7b50dc5a7a7cf76fd29 (patch) | |
| tree | c77e96c87680af172a25f95aa400bb873d3c7022 /assets/src/network/transfer/request.ts | |
| parent | 30487265282a16cd5f711e6d10bf7c9e7fd0f12b (diff) | |
| download | rook-29573488ada5c5b1f291f7b50dc5a7a7cf76fd29.tar.zst rook-29573488ada5c5b1f291f7b50dc5a7a7cf76fd29.zip | |
Send over data through channel
Diffstat (limited to 'assets/src/network/transfer/request.ts')
| -rw-r--r-- | assets/src/network/transfer/request.ts | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/assets/src/network/transfer/request.ts b/assets/src/network/transfer/request.ts new file mode 100644 index 0000000..920cd9a --- /dev/null +++ b/assets/src/network/transfer/request.ts @@ -0,0 +1,49 @@ +import { on, send } from "../channel/connection"; +import type { RequestIceCandidateMessage } from "../channel/messages/messages"; +import { + createTransfer, + onIncomingIceCandidate, + Transfer, + TransferType, + unregisterIceOnComplete, +} from "./transfer"; + +export async function answer( + offer: RTCSessionDescriptionInit +): Promise<Transfer> { + const transfer = createTransfer(TransferType.ANSWER, onChannel); + + const offerDescription = new RTCSessionDescription(offer); + transfer.pc.setRemoteDescription(offerDescription); + + const answer = await transfer.pc.createAnswer(); + transfer.pc.setLocalDescription(answer); + + transfer.pc.onicecandidate = event => { + const candidate = event.candidate; + if (event.candidate !== null) { + send("ice_candidate", { candidate }); + } + }; + + const unregisterIce = on( + "ice_candidate", + (message: RequestIceCandidateMessage) => + onIncomingIceCandidate(transfer, message) + ); + + unregisterIceOnComplete(transfer, unregisterIce); + + send("accept_share", { + sdp: answer.sdp, + type: answer.type, + }); + + return transfer; +} + +function onChannel(channel: RTCDataChannel) { + channel.onmessage = event => { + console.log(event.data) + } +} |
