about summary refs log tree commit diff
diff options
context:
space:
mode:
authorMelonai <einebeere@gmail.com>2021-06-14 11:55:03 +0200
committerMelonai <einebeere@gmail.com>2021-06-14 11:55:03 +0200
commitb98b1cd0e5d07fd37be54592edd362f443a145ad (patch)
tree9cf7be00c2a8aeee1a5240ae2024dd7e591d90eb
parent29573488ada5c5b1f291f7b50dc5a7a7cf76fd29 (diff)
downloadrook-b98b1cd0e5d07fd37be54592edd362f443a145ad.tar.zst
rook-b98b1cd0e5d07fd37be54592edd362f443a145ad.zip
Make connection independent of type
-rw-r--r--assets/src/components/RequestPage.svelte5
-rw-r--r--assets/src/components/share/Requests.svelte5
-rw-r--r--assets/src/network/channel/connection.ts25
-rw-r--r--assets/src/network/channel/request.ts6
-rw-r--r--assets/src/network/channel/share.ts12
5 files changed, 26 insertions, 27 deletions
diff --git a/assets/src/components/RequestPage.svelte b/assets/src/components/RequestPage.svelte
index 0c0b111..d73d9c0 100644
--- a/assets/src/components/RequestPage.svelte
+++ b/assets/src/components/RequestPage.svelte
@@ -1,9 +1,10 @@
 <script lang="ts">
-    import { start, Type } from "../network/channel/connection";
+    import { start } from "../network/channel/connection";
+    import { startRequest } from "../network/channel/request";
 
     // TODO: Switch to store-based state updates.
 
-    start(Type.REQUEST);
+    start().then(startRequest);
 </script>
 
 <main>
diff --git a/assets/src/components/share/Requests.svelte b/assets/src/components/share/Requests.svelte
index 509d7be..98596c6 100644
--- a/assets/src/components/share/Requests.svelte
+++ b/assets/src/components/share/Requests.svelte
@@ -1,10 +1,11 @@
 <script lang="ts">
-    import { getOwnToken, start, Type } from "../../network/channel/connection";
+    import { getOwnToken, start } from "../../network/channel/connection";
+    import { startShare } from "../../network/channel/share";
 
     import requests from "../../stores/requests";
     import Request from "./Request.svelte";
 
-    const startPromise = start(Type.SHARE);
+    const startPromise = start().then(startShare);
 
     // TODO: Switch to store-based state updates.
 </script>
diff --git a/assets/src/network/channel/connection.ts b/assets/src/network/channel/connection.ts
index e1ed2d1..c7e9012 100644
--- a/assets/src/network/channel/connection.ts
+++ b/assets/src/network/channel/connection.ts
@@ -6,17 +6,9 @@ import {
     UnregisterHandler,
 } from "./messages/handler";
 import type { AnyMessage } from "./messages/messages";
-import { startRequest } from "./request";
-import { startShare } from "./share";
 import { connectSocket, fetchToken } from "./socket";
 
-export enum Type {
-    NONE,
-    REQUEST,
-    SHARE,
-}
-
-enum ConnectionState {
+export enum ConnectionState {
     CONNECTING_SOCKET,
     FETCHING_TOKEN,
     CONNECTING_CHANNEL,
@@ -30,7 +22,6 @@ export type Connection = {
     token: string | null;
     state: ConnectionState;
     handlers: Handlers;
-    type: Type;
 };
 
 const connection: Connection = {
@@ -39,23 +30,15 @@ const connection: Connection = {
     token: null,
     state: ConnectionState.CONNECTING_SOCKET,
     handlers: {},
-    type: Type.NONE,
 };
 
-export async function start(type: Type.REQUEST | Type.SHARE) {
-    connection.type = type;
-
+export async function start() {
     await connectSocket(connection.socket);
 
     updateState(ConnectionState.FETCHING_TOKEN);
     connection.token = await fetchToken(connection.socket);
 
-    updateState(ConnectionState.CONNECTING_CHANNEL);
-    type === Type.SHARE
-        ? await startShare(connection)
-        : await startRequest(connection);
-
-    updateState(ConnectionState.CONNECTED)
+    return connection;
 }
 
 export function send(event: string, data: any): Push {
@@ -95,7 +78,7 @@ export function getOwnToken(): string {
     return connection.token;
 }
 
-function updateState(state: ConnectionState) {
+export function updateState(state: ConnectionState) {
     // TODO: Notify state listeners
     connection.state = state;
 }
diff --git a/assets/src/network/channel/request.ts b/assets/src/network/channel/request.ts
index 4a1c91f..693e408 100644
--- a/assets/src/network/channel/request.ts
+++ b/assets/src/network/channel/request.ts
@@ -1,10 +1,12 @@
 import getShareToken from "../../utils/getShareToken";
 import { answer } from "../transfer/request";
-import { Connection, on } from "./connection";
+import { Connection, ConnectionState, on, updateState } from "./connection";
 import type { RequestAcceptedMessage } from "./messages/messages";
 import { joinRequestChannel } from "./socket";
 
 export async function startRequest(connection: Connection) {
+    updateState(ConnectionState.CONNECTING_CHANNEL);
+
     const requestChannel = await joinRequestChannel(
         connection.socket,
         connection.token,
@@ -13,6 +15,8 @@ export async function startRequest(connection: Connection) {
     connection.channel = requestChannel;
 
     on("request_accepted", onRequestAccepted);
+
+    updateState(ConnectionState.CONNECTED);
 }
 
 async function onRequestAccepted(message: RequestAcceptedMessage) {
diff --git a/assets/src/network/channel/share.ts b/assets/src/network/channel/share.ts
index 6dbf0cd..81942af 100644
--- a/assets/src/network/channel/share.ts
+++ b/assets/src/network/channel/share.ts
@@ -1,5 +1,11 @@
 import requests from "../../stores/requests";
-import { Connection, on, onWithToken } from "./connection";
+import {
+    Connection,
+    ConnectionState,
+    on,
+    onWithToken,
+    updateState,
+} from "./connection";
 import type { UnregisterHandler } from "./messages/handler";
 import type {
     NewRequestMessage,
@@ -8,6 +14,8 @@ import type {
 import { joinShareChannel } from "./socket";
 
 export async function startShare(connection: Connection) {
+    updateState(ConnectionState.CONNECTING_CHANNEL);
+
     const shareChannel = await joinShareChannel(
         connection.socket,
         connection.token
@@ -15,6 +23,8 @@ export async function startShare(connection: Connection) {
     connection.channel = shareChannel;
 
     on("new_request", onNewRequest);
+
+    updateState(ConnectionState.CONNECTED);
 }
 
 function onNewRequest(message: NewRequestMessage) {