diff options
| author | Melonai <einebeere@gmail.com> | 2021-05-31 01:51:57 +0200 |
|---|---|---|
| committer | Melonai <einebeere@gmail.com> | 2021-05-31 01:51:57 +0200 |
| commit | d22b90b715590e019f44cf8267565755f870f54b (patch) | |
| tree | 6ffd5f1bb41ebaf55a6d74abf4c605cc9869de40 /assets/src | |
| parent | 8f1f90c3e7d836a23f1cd09617c2a0fcfac3f3f4 (diff) | |
| download | rook-d22b90b715590e019f44cf8267565755f870f54b.tar.zst rook-d22b90b715590e019f44cf8267565755f870f54b.zip | |
WebRTC transfers
Diffstat (limited to 'assets/src')
| -rw-r--r-- | assets/src/network/transfer/transfer.ts | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/assets/src/network/transfer/transfer.ts b/assets/src/network/transfer/transfer.ts new file mode 100644 index 0000000..80b6965 --- /dev/null +++ b/assets/src/network/transfer/transfer.ts @@ -0,0 +1,63 @@ +import { send } from "../channel/connection"; + +export enum TransferType { + OFFER, + ANSWER, +} + +export type Transfer = { + pc: RTCPeerConnection; + channel: RTCDataChannel; + type: TransferType; +}; + +export async function offer(request_token: string): Promise<Transfer> { + const transfer = createTransfer(TransferType.OFFER); + + const offer = await transfer.pc.createOffer(); + transfer.pc.setLocalDescription(offer); + + // TODO: Start waiting for remote answer + + send("accept_request", { + request: request_token, + sdp: offer.sdp, + type: offer.type, + }); + + return transfer; +} + +export async function answer( + offer: RTCSessionDescriptionInit +): Promise<Transfer> { + const transfer = createTransfer(TransferType.ANSWER); + + const offerDescription = new RTCSessionDescription(offer); + transfer.pc.setRemoteDescription(offerDescription); + + const answer = await transfer.pc.createAnswer(); + transfer.pc.setLocalDescription(answer); + + send("answer", { + sdp: offer.sdp, + type: offer.type, + }); + + + return transfer; +} + +function createTransfer(type: TransferType): Transfer { + const pc = new RTCPeerConnection(null); + const channel = pc.createDataChannel("channel", { + negotiated: true, + id: 0, + }); + + return { + pc, + channel, + type, + }; +} \ No newline at end of file |
