about summary refs log tree commit diff
path: root/assets/src
diff options
context:
space:
mode:
authorMelonai <einebeere@gmail.com>2021-05-31 01:51:57 +0200
committerMelonai <einebeere@gmail.com>2021-05-31 01:51:57 +0200
commitd22b90b715590e019f44cf8267565755f870f54b (patch)
tree6ffd5f1bb41ebaf55a6d74abf4c605cc9869de40 /assets/src
parent8f1f90c3e7d836a23f1cd09617c2a0fcfac3f3f4 (diff)
downloadrook-d22b90b715590e019f44cf8267565755f870f54b.tar.zst
rook-d22b90b715590e019f44cf8267565755f870f54b.zip
WebRTC transfers
Diffstat (limited to 'assets/src')
-rw-r--r--assets/src/network/transfer/transfer.ts63
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