aboutsummaryrefslogtreecommitdiff
path: root/assets/src/models
diff options
context:
space:
mode:
Diffstat (limited to 'assets/src/models')
-rw-r--r--assets/src/models/incoming_request.ts57
-rw-r--r--assets/src/models/own_request.ts40
2 files changed, 97 insertions, 0 deletions
diff --git a/assets/src/models/incoming_request.ts b/assets/src/models/incoming_request.ts
new file mode 100644
index 0000000..e1eefb1
--- /dev/null
+++ b/assets/src/models/incoming_request.ts
@@ -0,0 +1,57 @@
+import { bindTransfer, Transfer } from "../network/transfer/transfer";
+import { Writable, writable } from "svelte/store";
+import { createOfferTransfer } from "../network/transfer/share_transfer";
+
+// Represents the current progress of every request
+export enum IncomingRequestState {
+ // Request was neither accepted nor declined yet
+ WAITING,
+ // Data is being transferred, more precise data
+ // is available in the corresponding Transfer object
+ IN_FLIGHT,
+ // Requestor has received all data
+ DONE,
+ // Request was declined
+ DECLINED,
+}
+
+// Identifying information about the requestor
+export type IncomingRequestInfo = {
+ token: string;
+};
+
+// The model for a request received by a sharer
+// The state marks changes in the progression of the request lifecycle and can be subscribed to
+export type IncomingRequest = {
+ // Transfer is null while request isn't IN_FLIGHT
+ transfer: Transfer | null;
+ info: IncomingRequestInfo;
+ state: Writable<IncomingRequestState>;
+};
+
+// Create a model for a new incoming request
+export function newIncomingRequest(token: string): IncomingRequest {
+ const info = {
+ token,
+ };
+
+ return {
+ transfer: null,
+ info,
+ // Each request starts out as just received and waiting for an answer
+ state: writable(IncomingRequestState.WAITING),
+ };
+}
+
+// Starts the transfer of data from the sharer to the requestor
+export function acceptIncomingRequest(request: IncomingRequest) {
+ request.state.set(IncomingRequestState.IN_FLIGHT);
+
+ bindTransfer(request, createOfferTransfer(request.info.token), () =>
+ request.state.set(IncomingRequestState.DONE)
+ );
+}
+
+export function declineIncomingRequest(request: IncomingRequest) {
+ // TODO
+}
diff --git a/assets/src/models/own_request.ts b/assets/src/models/own_request.ts
new file mode 100644
index 0000000..2ad29af
--- /dev/null
+++ b/assets/src/models/own_request.ts
@@ -0,0 +1,40 @@
+import { bindTransfer, Transfer } from "../network/transfer/transfer";
+import { writable, Writable } from "svelte/store";
+import { createAnswerTransfer } from "../network/transfer/request_transfer";
+
+// Represents the current progress of the request
+export enum OwnRequestState {
+ PENDING,
+ ACKNOWLEDGED,
+
+ IN_FLIGHT,
+ DONE,
+
+ DECLINED,
+ SHARE_CANCELLED,
+ NO_SUCH_SHARE,
+}
+
+export type OwnRequest = {
+ // Transfer is null while request isn't IN_FLIGHT
+ transfer: Transfer | null;
+ state: Writable<OwnRequestState>;
+};
+
+export function initializeRequest(): OwnRequest {
+ return {
+ transfer: null,
+ state: writable(OwnRequestState.PENDING),
+ };
+}
+
+export function requestAccepted(
+ request: OwnRequest,
+ description: RTCSessionDescriptionInit
+) {
+ request.state.set(OwnRequestState.IN_FLIGHT);
+
+ bindTransfer(request, createAnswerTransfer(description), () =>
+ request.state.set(OwnRequestState.DONE)
+ );
+}