diff options
| author | Melonai <einebeere@gmail.com> | 2021-07-08 23:29:20 +0200 |
|---|---|---|
| committer | Melonai <einebeere@gmail.com> | 2021-07-08 23:29:20 +0200 |
| commit | c3b05a72b7185112ece6e42c99e9a828c8298f04 (patch) | |
| tree | 317da6fbe640ffa57cf771b4b9e3b0beb80e836c /assets/src/models | |
| parent | 9d8ca2a653661560f471d717d188e92a79edb250 (diff) | |
| download | rook-c3b05a72b7185112ece6e42c99e9a828c8298f04.tar.zst rook-c3b05a72b7185112ece6e42c99e9a828c8298f04.zip | |
State display for incoming and own requests
Diffstat (limited to 'assets/src/models')
| -rw-r--r-- | assets/src/models/incoming_request.ts | 57 | ||||
| -rw-r--r-- | assets/src/models/own_request.ts | 40 |
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) + ); +} |
