about summary refs log tree commit diff
path: root/assets/src/network/channel/share_connection.ts
diff options
context:
space:
mode:
authorMelonai <einebeere@gmail.com>2021-07-08 23:29:20 +0200
committerMelonai <einebeere@gmail.com>2021-07-08 23:29:20 +0200
commitc3b05a72b7185112ece6e42c99e9a828c8298f04 (patch)
tree317da6fbe640ffa57cf771b4b9e3b0beb80e836c /assets/src/network/channel/share_connection.ts
parent9d8ca2a653661560f471d717d188e92a79edb250 (diff)
downloadrook-c3b05a72b7185112ece6e42c99e9a828c8298f04.tar.zst
rook-c3b05a72b7185112ece6e42c99e9a828c8298f04.zip
State display for incoming and own requests
Diffstat (limited to 'assets/src/network/channel/share_connection.ts')
-rw-r--r--assets/src/network/channel/share_connection.ts51
1 files changed, 51 insertions, 0 deletions
diff --git a/assets/src/network/channel/share_connection.ts b/assets/src/network/channel/share_connection.ts
new file mode 100644
index 0000000..415cb7f
--- /dev/null
+++ b/assets/src/network/channel/share_connection.ts
@@ -0,0 +1,51 @@
+import { newIncomingRequest } from "../../models/incoming_request";
+import requests from "../../stores/received_requests";
+import {
+    ConnectionState,
+    on,
+    onWithToken,
+    start,
+    updateState,
+} from "./connection";
+import type { UnregisterHandler } from "./messages/handler";
+import type {
+    NewRequestMessage,
+    RequestCancelledMessage,
+} from "./messages/messages";
+import { joinShareChannel } from "./socket";
+
+export async function startShareConnection() {
+    const connection = await start();
+
+    updateState(ConnectionState.CONNECTING_CHANNEL);
+
+    const shareChannel = await joinShareChannel(
+        connection.socket,
+        connection.token
+    );
+    connection.channel = shareChannel;
+
+    on("new_request", onNewRequest);
+
+    updateState(ConnectionState.CONNECTED);
+}
+
+// Events which can happen without prior triggers during a share's lifetime
+
+function onNewRequest(message: NewRequestMessage) {
+    const token = message.token;
+
+    const request = newIncomingRequest(token);
+    requests.addRequest(request);
+
+    onWithToken("request_cancelled", token, onRequestCancelled);
+}
+
+function onRequestCancelled(
+    message: RequestCancelledMessage,
+    unregister: UnregisterHandler
+) {
+    const token = message.token;
+    requests.removeRequest(token);
+    unregister();
+}