aboutsummaryrefslogtreecommitdiffstats
path: root/backend/dist
diff options
context:
space:
mode:
Diffstat (limited to 'backend/dist')
-rw-r--r--backend/dist/app.js15
-rw-r--r--backend/dist/app.js.map1
-rw-r--r--backend/dist/config/session-store.js59
-rw-r--r--backend/dist/config/session-store.js.map1
-rw-r--r--backend/dist/router.js6
-rw-r--r--backend/dist/router.js.map1
-rw-r--r--backend/dist/routes/session.route.js6
-rw-r--r--backend/dist/routes/session.route.js.map1
-rw-r--r--backend/dist/websocket/game.js84
-rw-r--r--backend/dist/websocket/game.js.map1
10 files changed, 175 insertions, 0 deletions
diff --git a/backend/dist/app.js b/backend/dist/app.js
new file mode 100644
index 0000000..3cc20eb
--- /dev/null
+++ b/backend/dist/app.js
@@ -0,0 +1,15 @@
+import express from 'express';
+import router from './router.js';
+import cors from 'cors';
+import createWebsocketServer from './websocket/game.js';
+const app = express();
+app.use(express.json());
+app.use(express.urlencoded({ extended: true }));
+app.use(cors());
+app.use('/', router);
+const port = parseInt(process.env.PORT || "3000");
+const server = app.listen(port, () => {
+ console.log(`Server listening on port ${port}`);
+});
+const websocketServer = createWebsocketServer(server);
+//# sourceMappingURL=app.js.map \ No newline at end of file
diff --git a/backend/dist/app.js.map b/backend/dist/app.js.map
new file mode 100644
index 0000000..862c5c3
--- /dev/null
+++ b/backend/dist/app.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,qBAAqB,MAAM,qBAAqB,CAAC;AAGxD,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;AAEtB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;AACxB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAG,IAAI,EAAC,CAAC,CAAC,CAAA;AAE/C,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;AAEhB,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAErB,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC;AAElD,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;IACjC,OAAO,CAAC,GAAG,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;AACpD,CAAC,CAAC,CAAC;AAEH,MAAM,eAAe,GAAoB,qBAAqB,CAAC,MAAM,CAAC,CAAC"} \ No newline at end of file
diff --git a/backend/dist/config/session-store.js b/backend/dist/config/session-store.js
new file mode 100644
index 0000000..e40e6f6
--- /dev/null
+++ b/backend/dist/config/session-store.js
@@ -0,0 +1,59 @@
+const sessions = {};
+function makeid(length) {
+ let result = '';
+ const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
+ const charactersLength = characters.length;
+ let counter = 0;
+ while (counter < length) {
+ result += characters.charAt(Math.floor(Math.random() * charactersLength));
+ counter += 1;
+ }
+ return result;
+}
+export const createNewSession = () => {
+ const id = makeid(10);
+ const session = {
+ id,
+ state: "waiting",
+ host: undefined,
+ clients: [],
+ };
+ sessions[id] = session;
+ return session;
+};
+export const setSessionState = (id, state) => {
+ if (!sessions[id]) {
+ return;
+ }
+ sessions[id].state = state;
+};
+export const setSessionHost = (id, clientId) => {
+ if (!sessions[id]) {
+ return;
+ }
+ sessions[id].host = clientId;
+};
+export const addSessionClient = (id, clientId) => {
+ var _a;
+ if (!sessions[id]) {
+ return;
+ }
+ (_a = sessions[id]) === null || _a === void 0 ? void 0 : _a.clients.push(clientId);
+};
+export const cleanupSession = (id) => {
+ if (!sessions[id]) {
+ return;
+ }
+ // if (sessions[id].host) {
+ // sessions[id].host!.close();
+ // }
+ //
+ // sessions[id].clients.forEach((client) => {
+ // client.close();
+ // });
+ delete sessions[id];
+};
+export const getSession = (id) => {
+ return sessions[id];
+};
+//# sourceMappingURL=session-store.js.map \ No newline at end of file
diff --git a/backend/dist/config/session-store.js.map b/backend/dist/config/session-store.js.map
new file mode 100644
index 0000000..e119299
--- /dev/null
+++ b/backend/dist/config/session-store.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"session-store.js","sourceRoot":"","sources":["../../src/config/session-store.ts"],"names":[],"mappings":"AAOA,MAAM,QAAQ,GAA+B,EAAE,CAAC;AAEhD,SAAS,MAAM,CAAC,MAAM;IACpB,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,UAAU,GAAG,gEAAgE,CAAC;IACpF,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAAC;IAC3C,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,OAAO,OAAO,GAAG,MAAM,EAAE;QACvB,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC,CAAC;KACd;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAGD,MAAM,CAAC,MAAM,gBAAgB,GAAG,GAAY,EAAE;IAC5C,MAAM,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IACtB,MAAM,OAAO,GAAG;QACd,EAAE;QACF,KAAK,EAAE,SAAS;QAChB,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,EAAE;KACZ,CAAC;IACF,QAAQ,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;IACvB,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,EAAU,EAAE,KAAa,EAAQ,EAAE;IACjE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;QACjB,OAAO;KACR;IAED,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAU,EAAE,QAAgB,EAAQ,EAAE;IACnE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;QACjB,OAAO;KACR;IAED,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,QAAQ,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,EAAU,EAAE,QAAgB,EAAQ,EAAE;;IACrE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;QACjB,OAAO;KACR;IAED,MAAA,QAAQ,CAAC,EAAE,CAAC,0CAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,EAAU,EAAQ,EAAE;IACjD,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;QACjB,OAAO;KACR;IAEH,4BAA4B;IAC5B,iCAAiC;IACjC,KAAK;IACL,IAAI;IACJ,8CAA8C;IAC9C,qBAAqB;IACrB,OAAO;IAEL,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,EAAU,EAAW,EAAE;IAChD,OAAO,QAAQ,CAAC,EAAE,CAAC,CAAC;AACtB,CAAC,CAAC"} \ No newline at end of file
diff --git a/backend/dist/router.js b/backend/dist/router.js
new file mode 100644
index 0000000..d53eeee
--- /dev/null
+++ b/backend/dist/router.js
@@ -0,0 +1,6 @@
+import express from "express";
+import { createSession } from "./routes/session.route.js";
+const router = express.Router();
+router.post("/session", createSession);
+export default router;
+//# sourceMappingURL=router.js.map \ No newline at end of file
diff --git a/backend/dist/router.js.map b/backend/dist/router.js.map
new file mode 100644
index 0000000..ea6f3d5
--- /dev/null
+++ b/backend/dist/router.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"router.js","sourceRoot":"","sources":["../src/router.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE1D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;AAEhC,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEvC,eAAe,MAAM,CAAC"} \ No newline at end of file
diff --git a/backend/dist/routes/session.route.js b/backend/dist/routes/session.route.js
new file mode 100644
index 0000000..d4fd63a
--- /dev/null
+++ b/backend/dist/routes/session.route.js
@@ -0,0 +1,6 @@
+import { createNewSession } from "../config/session-store.js";
+export function createSession(req, res) {
+ const session = createNewSession();
+ res.status(201).send(session);
+}
+//# sourceMappingURL=session.route.js.map \ No newline at end of file
diff --git a/backend/dist/routes/session.route.js.map b/backend/dist/routes/session.route.js.map
new file mode 100644
index 0000000..b45a632
--- /dev/null
+++ b/backend/dist/routes/session.route.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"session.route.js","sourceRoot":"","sources":["../../src/routes/session.route.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAG9D,MAAM,UAAU,aAAa,CAAC,GAAY,EAAE,GAAa;IACvD,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC"} \ No newline at end of file
diff --git a/backend/dist/websocket/game.js b/backend/dist/websocket/game.js
new file mode 100644
index 0000000..35d7ad8
--- /dev/null
+++ b/backend/dist/websocket/game.js
@@ -0,0 +1,84 @@
+import { addSessionClient, getSession, setSessionHost } from "../config/session-store.js";
+import { WebSocketServer } from "ws";
+import { v4 as uuidv4 } from "uuid";
+const wss = new WebSocketServer({ noServer: true });
+const sendToClient = (clientId, message) => {
+ wss.clients.forEach((client) => {
+ if (client.clientId === clientId) {
+ client.send(JSON.stringify(message));
+ }
+ });
+};
+const broadcastToClients = (clientIds, message) => {
+ wss.clients.forEach((client) => {
+ if (clientIds.includes(client.clientId)) {
+ client.send(JSON.stringify(message));
+ }
+ });
+};
+export const createWebsocketServer = (server) => {
+ server.on("upgrade", (req, socket, head) => {
+ wss.handleUpgrade(req, socket, head, (ws) => {
+ wss.emit("connection", ws, req);
+ });
+ });
+ wss.on("connection", (ws) => {
+ ws.clientId = uuidv4();
+ ws.on("message", (message) => {
+ console.log("received: %s", message);
+ let data;
+ try {
+ data = JSON.parse(message.toString());
+ }
+ catch (e) {
+ console.log("Invalid JSON");
+ return;
+ }
+ if (data.action === "host") {
+ setSessionHost(data.sessionId, ws.clientId);
+ }
+ else if (data.action === "move") {
+ const session = getSession(data.sessionId);
+ if (!session) {
+ return;
+ }
+ sendToClient(session.host, {
+ action: "move",
+ move: data.move,
+ });
+ }
+ else if (data.action === "join") {
+ const session = getSession(data.sessionId);
+ if (!session) {
+ return;
+ }
+ addSessionClient(data.sessionId, ws.clientId);
+ sendToClient(session.host, {
+ action: "join",
+ clients: session.clients.length,
+ });
+ ws.send(JSON.stringify({
+ action: "state",
+ state: session.state,
+ }));
+ }
+ else if (data.action === "start") {
+ const session = getSession(data.sessionId);
+ if (!session) {
+ return;
+ }
+ sendToClient(session.host, {
+ action: "state",
+ state: "playing",
+ });
+ broadcastToClients(session.clients, {
+ action: "state",
+ state: "playing",
+ });
+ }
+ });
+ });
+ return wss;
+};
+export default createWebsocketServer;
+//# sourceMappingURL=game.js.map \ No newline at end of file
diff --git a/backend/dist/websocket/game.js.map b/backend/dist/websocket/game.js.map
new file mode 100644
index 0000000..ef0df87
--- /dev/null
+++ b/backend/dist/websocket/game.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"game.js","sourceRoot":"","sources":["../../src/websocket/game.ts"],"names":[],"mappings":"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"} \ No newline at end of file