summaryrefslogtreecommitdiff
path: root/together/build
diff options
context:
space:
mode:
authorMinteck <contact@minteck.org>2023-02-23 19:34:56 +0100
committerMinteck <contact@minteck.org>2023-02-23 19:34:56 +0100
commit3d1cd02f27518f1a04374c7c8320cd5d82ede6e9 (patch)
tree75be5fba4368472fb11c8015aee026b2b9a71888 /together/build
parent8cc1f13c17fa2fb5a4410542d39e650e02945634 (diff)
downloadpluralconnect-3d1cd02f27518f1a04374c7c8320cd5d82ede6e9.tar.gz
pluralconnect-3d1cd02f27518f1a04374c7c8320cd5d82ede6e9.tar.bz2
pluralconnect-3d1cd02f27518f1a04374c7c8320cd5d82ede6e9.zip
Updated 40 files, added 37 files, deleted 1103 files and renamed 3905 files (automated)
Diffstat (limited to 'together/build')
-rw-r--r--together/build/index.js370
-rw-r--r--together/build/index.js.map1
2 files changed, 0 insertions, 371 deletions
diff --git a/together/build/index.js b/together/build/index.js
deleted file mode 100644
index e1eed33..0000000
--- a/together/build/index.js
+++ /dev/null
@@ -1,370 +0,0 @@
-"use strict";
-// pony pone pone pony
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const ws_1 = require("ws");
-const InternalAPI_1 = require("./utils/InternalAPI");
-const User_1 = __importDefault(require("./types/User"));
-const Session_1 = __importDefault(require("./types/Session"));
-const Video_1 = require("./types/Video");
-const crypto_1 = require("crypto");
-const wss = new ws_1.WebSocketServer({ port: 22666 });
-let sessions = new Map();
-let partycodes = new Map();
-wss.on('connection', (ws) => {
- let user;
- let timeoutProcess = setTimeout(() => {
- ws.send(JSON.stringify({
- "task": "TERMINATE",
- "payload": {
- "code": "NO_IDENT",
- "reason": "The client did not identify in time."
- }
- }));
- ws.close();
- }, 1000);
- ws.on("message", async (data) => {
- let event = JSON.parse(data.toString());
- if (event.task === "IDENTIFY") {
- if (user !== undefined) {
- ws.send(JSON.stringify({
- "task": "TERMINATE",
- "payload": {
- "code": "ALREADY_IDENT",
- "reason": "This session has already identified."
- }
- }));
- return ws.close();
- }
- clearTimeout(timeoutProcess);
- if (["", undefined, null].includes(event.payload["token"]) || typeof event.payload["token"] !== "string") {
- ws.send(JSON.stringify({
- "task": "TERMINATE",
- "payload": {
- "code": "BAD_TOKEN",
- "reason": "The token is not provided or malformed."
- }
- }));
- return ws.close();
- }
- let tokenValid = await (0, InternalAPI_1.isSessionValid)(event.payload["token"]);
- if (!tokenValid) {
- ws.send(JSON.stringify({
- "task": "TERMINATE",
- "payload": {
- "code": "INVALID_TOKEN",
- "reason": "The token provided is not valid."
- }
- }));
- return ws.close();
- }
- ws.send(JSON.stringify({
- "task": "CONFIG",
- "payload": {
- "heartbeatInterval": 100
- }
- }));
- timeoutProcess = setTimeout(() => {
- ws.send(JSON.stringify({
- "task": "TERMINATE",
- "payload": {
- "code": "HEARTBEAT_MISS",
- "reason": "The client missed a heartbeat (dead connection)."
- }
- }));
- ws.close();
- }, 10000);
- user = new User_1.default(ws, event.payload["token"]);
- }
- if (event.task == "HEARTBEAT") {
- clearInterval(timeoutProcess);
- timeoutProcess = setTimeout(() => {
- ws.send(JSON.stringify({
- "task": "TERMINATE",
- "payload": {
- "code": "HEARTBEAT_MISS",
- "reason": "The client missed a heartbeat (dead connection)."
- }
- }));
- ws.close();
- }, 2000);
- if (ws["currentSessionId"] !== undefined) {
- let session = sessions.get(ws["currentSessionId"]);
- user.videoPositon = event.payload["videoPosition"];
- let index = session.users.findIndex(iuser => iuser.id == user.id);
- session.users[index].videoPositon = event.payload["videoPositon"];
- sessions.set(session.id, session);
- let delays = {};
- session.users.forEach(iuser => {
- delays[iuser.id] = Math.floor((iuser.videoPositon * 1000) - (user.videoPositon * 1000));
- if (session.currentVideo === null)
- return;
- if (session.currentVideo.state !== Video_1.VideoState.Playing)
- return;
- if (delays[iuser.id] > 1000 || delays[iuser.id] < -1000) {
- ws.send(JSON.stringify({
- "task": "VIDEO_UPDATE",
- "payload": {
- "position": user.videoPositon
- }
- }));
- }
- });
- ws.send(JSON.stringify({
- "task": "HEARTBEAT_ACK",
- "payload": {
- "delays": delays
- }
- }));
- }
- else {
- ws.send(JSON.stringify({
- "task": "HEARTBEAT_ACK",
- "payload": {
- "delays": []
- }
- }));
- }
- }
- if (event.task == "SESSION") {
- if (event.payload["id"] == null) {
- let session = new Session_1.default();
- session.users.push(user);
- sessions.set(session.id, session);
- partycodes.set(session.partyCode, session.id);
- ws["currentSessionId"] = session.id;
- let safeUsers = [];
- session.users.forEach(iuser => {
- safeUsers.push({
- id: iuser.id
- });
- });
- ws.send(JSON.stringify({
- "task": "SESSION",
- "payload": {
- "code": session.partyCode,
- "users": safeUsers,
- "queue": session.videoQueue
- }
- }));
- /*let video = await user.getYoutubeVideo("wDVLrJESFNI");
- let ongoingVideo = video.toOngoingVideo();
-
- session.currentVideo = ongoingVideo;
-
- sessions.set(session.id, session);
-
- ws.send(JSON.stringify({
- "task": "VIDEO_UPDATE",
- "payload": {
- "url": ongoingVideo.url,
- "title": ongoingVideo.title,
- "author": ongoingVideo.author,
- "thumbnail": ongoingVideo.thumbnail,
- "state": ongoingVideo.state,
- "position": ongoingVideo.position
- }
- }));*/
- }
- else {
- if (["", undefined, null].includes(event.payload["id"]) || typeof event.payload["id"] != "string")
- return ws.send(JSON.stringify({
- "task": "FAILURE",
- "payload": {
- "code": "BAD_CODE",
- "reason": "The party code is not present or is malformed."
- }
- }));
- if (!partycodes.has(event.payload["id"]))
- return ws.send(JSON.stringify({
- "task": "FAILURE",
- "payload": {
- "code": "INVALID_CODE",
- "reason": "This party code is not valid."
- }
- }));
- let sessionId = partycodes.get(event.payload["id"]);
- let session = sessions.get(sessionId);
- ws["currentSessionId"] = session.id;
- session.users.push(user);
- sessions.set(session.id, session);
- let safeUsers = [];
- session.users.forEach(iuser => {
- safeUsers.push({
- id: iuser.id
- });
- });
- session.users.forEach(iuser => {
- if (iuser.id == user.id)
- return;
- iuser.ws.send(JSON.stringify({
- "task": "UPDATE_USERS",
- "payload": {
- "users": safeUsers
- }
- }));
- });
- ws.send(JSON.stringify({
- "task": "SESSION",
- "payload": {
- "code": session.partyCode,
- "users": safeUsers,
- "queue": session.videoQueue
- }
- }));
- if (session.currentVideo != null) {
- ws.send(JSON.stringify({
- "task": "VIDEO_UPDATE",
- "payload": {
- "id": session.currentVideo.id,
- "url": session.currentVideo.url,
- "title": session.currentVideo.title,
- "author": session.currentVideo.author,
- "duration": session.currentVideo.duration,
- "duration_pretty": session.currentVideo.duration_pretty,
- "thumbnail": session.currentVideo.thumbnail,
- "state": session.currentVideo.state,
- "position": session.currentVideo.position
- }
- }));
- }
- }
- }
- if (event.task == "VIDEO_UPDATE") {
- let session = sessions.get(ws["currentSessionId"]);
- if (session.currentVideo !== null && session.currentVideo.state === Video_1.VideoState.Loading)
- return;
- if (session.currentVideo) {
- if (event.payload["state"] === 2) {
- session.currentVideo.state = Video_1.VideoState.Buffering;
- }
- else if (event.payload["state"] === 1) {
- session.currentVideo.state = Video_1.VideoState.Playing;
- }
- else if (event.payload["state"] === 0) {
- session.currentVideo.state = Video_1.VideoState.Paused;
- }
- session.currentVideo.position = event.payload["position"];
- if (event.payload["state"] === 0 && Math.floor(event.payload["position"]) >= (session.currentVideo.duration - 1)) {
- console.log("aaaa gotta change (Twi is cute btw)");
- session.currentVideo.state = Video_1.VideoState.Loading;
- setTimeout(() => {
- if (session.videoQueue.length === 0)
- session.currentVideo = null;
- else
- session.currentVideo = (session.videoQueue.shift()).toOngoingVideo();
- if (session.currentVideo !== null)
- session.currentVideo.state = Video_1.VideoState.Playing;
- session.users.forEach(iuser => {
- iuser.ws.send(JSON.stringify({
- "task": "VIDEO_UPDATE",
- "payload": {
- "id": session.currentVideo ? session.currentVideo.id : null,
- "sha": session.currentVideo ? (0, crypto_1.createHash)("sha256").update(session.currentVideo.id).digest("hex") : null,
- "url": session.currentVideo ? session.currentVideo.url : null,
- "title": session.currentVideo ? session.currentVideo.title : null,
- "duration": session.currentVideo ? session.currentVideo.duration : null,
- "duration_pretty": session.currentVideo ? session.currentVideo.duration_pretty : null,
- "author": session.currentVideo ? session.currentVideo.author : null,
- "thumbnail": session.currentVideo ? session.currentVideo.thumbnail : null,
- "state": session.currentVideo ? session.currentVideo.state : null,
- "position": session.currentVideo ? session.currentVideo.position : null
- }
- }));
- iuser.ws.send(JSON.stringify({
- "task": "UPDATE_QUEUE",
- "payload": {
- "queue": session.videoQueue,
- "poster": user.id
- }
- }));
- });
- }, 5000);
- }
- else {
- session.users.forEach(iuser => {
- if (iuser.id == user.id)
- return;
- iuser.ws.send(JSON.stringify({
- "task": "VIDEO_UPDATE",
- "payload": {
- "state": event.payload["state"],
- "position": event.payload["position"]
- }
- }));
- });
- }
- }
- sessions.set(session.id, session);
- }
- if (event.task == "UPDATE_QUEUE") {
- let session = sessions.get(ws["currentSessionId"]);
- if (event.payload["operation"] == "+") {
- let video = await user.getYoutubeVideo(event.payload["video"]);
- session.videoQueue.push(video);
- if (session.videoQueue.length === 1 && session.currentVideo === null) {
- session.currentVideo = (session.videoQueue.shift()).toOngoingVideo();
- session.users.forEach(user => {
- user.ws.send(JSON.stringify({
- "task": "VIDEO_UPDATE",
- "payload": {
- "id": session.currentVideo.id,
- "sha": (0, crypto_1.createHash)("sha256").update(session.currentVideo.id).digest("hex"),
- "url": session.currentVideo.url,
- "title": session.currentVideo.title,
- "author": session.currentVideo.author,
- "thumbnail": session.currentVideo.thumbnail,
- "state": session.currentVideo.state,
- "position": session.currentVideo.position
- }
- }));
- });
- }
- sessions.set(session.id, session);
- }
- session.users.forEach(iuser => {
- iuser.ws.send(JSON.stringify({
- "task": "UPDATE_QUEUE",
- "payload": {
- "queue": session.videoQueue,
- "poster": user.id
- }
- }));
- });
- }
- });
- ws.on("close", () => {
- if (ws["currentSessionId"] != undefined) {
- if (sessions.has(ws["currentSessionId"])) {
- let session = sessions.get(ws["currentSessionId"]);
- session.users = session.users.filter((iuser) => iuser.id != user.id);
- sessions.set(session.id, session);
- if (session.users.length == 0) {
- sessions.delete(session.id);
- partycodes.delete(session.partyCode);
- }
- else {
- let safeUsers = [];
- session.users.forEach(iuser => {
- safeUsers.push({
- id: iuser.id
- });
- });
- session.users.forEach(iuser => {
- if (iuser.id == user.id)
- return;
- iuser.ws.send(JSON.stringify({
- "task": "UPDATE_USERS",
- "payload": {
- "users": safeUsers
- }
- }));
- });
- }
- }
- }
- });
-});
-//# sourceMappingURL=index.js.map \ No newline at end of file
diff --git a/together/build/index.js.map b/together/build/index.js.map
deleted file mode 100644
index 5e323c7..0000000
--- a/together/build/index.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file