about summary refs log tree commit diff
path: root/assets/src/network
diff options
context:
space:
mode:
Diffstat (limited to 'assets/src/network')
-rw-r--r--assets/src/network/transfer/request_transfer.ts35
-rw-r--r--assets/src/network/transfer/share_transfer.ts52
-rw-r--r--assets/src/network/transfer/transfer.ts46
3 files changed, 30 insertions, 103 deletions
diff --git a/assets/src/network/transfer/request_transfer.ts b/assets/src/network/transfer/request_transfer.ts
index e69a9a8..6e4b322 100644
--- a/assets/src/network/transfer/request_transfer.ts
+++ b/assets/src/network/transfer/request_transfer.ts
@@ -1,17 +1,13 @@
-import data from "../../stores/data";
-import { on, send } from "../channel/connection";
-import type { ShareIceCandidateMessage } from "../channel/messages/messages";
-import {
-    createTransfer,
-    onIncomingIceCandidate,
-    Transfer,
-    unregisterIceOnComplete,
-} from "./transfer";
-
-export async function createAnswerTransfer(
-    offer: RTCSessionDescriptionInit
+import data from "../../state/data";
+import type { Connection } from "../channel/connection";
+import { createTransfer, Transfer } from "./transfer";
+
+export async function respondToOffer(
+    c: Connection,
+    offer: RTCSessionDescriptionInit,
+    onComplete: () => void
 ): Promise<Transfer> {
-    const transfer = createTransfer(onChannel);
+    const transfer = createTransfer(c => onChannel(c, onComplete));
 
     const offerDescription = new RTCSessionDescription(offer);
     transfer.pc.setRemoteDescription(offerDescription);
@@ -22,19 +18,12 @@ export async function createAnswerTransfer(
     transfer.pc.onicecandidate = event => {
         const candidate = event.candidate;
         if (event.candidate !== null) {
-            send("ice_candidate", { candidate });
+            // TODO: Check whether transfer was cancelled
+            c.send("ice_candidate", { candidate });
         }
     };
 
-    const unregisterIce = on(
-        "share_ice_candidate",
-        (message: ShareIceCandidateMessage) =>
-            onIncomingIceCandidate(transfer, message)
-    );
-
-    unregisterIceOnComplete(transfer, unregisterIce);
-
-    send("accept_share", {
+    c.send("accept_share", {
         sdp: answer.sdp,
         type: answer.type,
     });
diff --git a/assets/src/network/transfer/share_transfer.ts b/assets/src/network/transfer/share_transfer.ts
index f641a56..85e67b0 100644
--- a/assets/src/network/transfer/share_transfer.ts
+++ b/assets/src/network/transfer/share_transfer.ts
@@ -1,22 +1,18 @@
 import { get } from "svelte/store";
-import dataStore from "../../stores/data";
-import { onWithToken, send } from "../channel/connection";
-import type { UnregisterFn } from "../channel/messages/event_handler";
+import dataStore from "../../state/data";
+import type { Connection } from "../channel/connection";
 import type {
     RequestIceCandidateMessage,
     ShareAcceptedMessage,
 } from "../channel/messages/messages";
-import {
-    createTransfer,
-    onIncomingIceCandidate,
-    Transfer,
-    unregisterIceOnComplete,
-} from "./transfer";
+import { createTransfer, addRemoteIceCandidate, Transfer, TransferState } from "./transfer";
 
-export async function createOfferTransfer(
-    request_token: string
+export async function createTranferAndSendOffer(
+    c: Connection,
+    request_token: string,
+    onComplete: () => void
 ): Promise<Transfer> {
-    const transfer = createTransfer(onChannel);
+    const transfer = createTransfer(c => onChannel(c, onComplete));
 
     const offer = await transfer.pc.createOffer();
     transfer.pc.setLocalDescription(offer);
@@ -24,46 +20,26 @@ export async function createOfferTransfer(
     transfer.pc.onicecandidate = event => {
         const candidate = event.candidate;
         if (event.candidate !== null) {
-            send("ice_candidate", { candidate, token: request_token });
+            // TODO: Check whether transfer was cancelled and don't send if so.
+            c.send("ice_candidate", { candidate, token: request_token });
         }
     };
 
-    send("accept_request", {
+    c.send("accept_request", {
         token: request_token,
         sdp: offer.sdp,
         type: offer.type,
     });
 
-    const unregister: UnregisterFn = onWithToken(
-        "share_accepted",
-        request_token,
-        (message: ShareAcceptedMessage) =>
-            onShareAccepted(transfer, message, unregister)
-    );
-
     return transfer;
 }
 
-function onShareAccepted(
+export function addRemoteDescription(
     transfer: Transfer,
-    message: ShareAcceptedMessage,
-    unregister: UnregisterFn
+    session: RTCSessionDescriptionInit
 ) {
-    const token = message.token;
-
-    const answerDescription = new RTCSessionDescription(message);
+    const answerDescription = new RTCSessionDescription(session);
     transfer.pc.setRemoteDescription(answerDescription);
-
-    const unregisterIce = onWithToken(
-        "request_ice_candidate",
-        token,
-        (message: RequestIceCandidateMessage) =>
-            onIncomingIceCandidate(transfer, message)
-    );
-
-    unregisterIceOnComplete(transfer, unregisterIce);
-
-    unregister();
 }
 
 function onChannel(channel: RTCDataChannel, completeTransfer: () => void) {
diff --git a/assets/src/network/transfer/transfer.ts b/assets/src/network/transfer/transfer.ts
index e950589..399250f 100644
--- a/assets/src/network/transfer/transfer.ts
+++ b/assets/src/network/transfer/transfer.ts
@@ -1,11 +1,4 @@
 import { Writable, writable } from "svelte/store";
-import type { IncomingRequest } from "../../models/incoming_request";
-import type { OwnRequest } from "../../models/own_request";
-import type { UnregisterFn } from "../channel/messages/event_handler";
-import type {
-    RequestIceCandidateMessage,
-    ShareIceCandidateMessage,
-} from "../channel/messages/messages";
 
 export enum TransferState {
     CONNECTING,
@@ -49,6 +42,7 @@ export function createTransfer(
     };
 
     channel.onopen = () => {
+        console.log("Transfer channel open.");
         state.set(TransferState.TRANSFERRING);
         onChannel(channel, () => onTransferComplete(transfer));
     };
@@ -56,43 +50,11 @@ export function createTransfer(
     return transfer;
 }
 
-export function bindTransfer(
-    request: OwnRequest | IncomingRequest,
-    transferPromise: Promise<Transfer>,
-    completeTransfer: () => void
-) {
-    transferPromise.then(transfer => {
-        request.transfer = transfer;
-
-        const unsubsribe = transfer.state.subscribe(transferState => {
-            if (transferState === TransferState.DONE) {
-                unsubsribe();
-                // Once the data has been transferred we can remove the transfer
-                request.transfer = null;
-
-                completeTransfer();
-            }
-        });
-    });
-}
-
-export function onIncomingIceCandidate(
+export function addRemoteIceCandidate(
     transfer: Transfer,
-    message: ShareIceCandidateMessage | RequestIceCandidateMessage
+    candidate: RTCIceCandidateInit
 ) {
-    transfer.pc.addIceCandidate(message.candidate);
-}
-
-export function unregisterIceOnComplete(
-    transfer: Transfer,
-    unregister: UnregisterFn
-) {
-    transfer.pc.onicegatheringstatechange = event => {
-        const connection = event.target as any;
-        if (connection.iceGatheringState === "complete") {
-            unregister();
-        }
-    };
+    transfer.pc.addIceCandidate(candidate);
 }
 
 function onTransferComplete(transfer: Transfer) {