From 7d8cca54e548d2a85287fd2325db88f2697be55a Mon Sep 17 00:00:00 2001 From: Leonardo Bishop Date: Sat, 4 Nov 2023 21:28:11 +0000 Subject: Add more shit --- backend/dist/app.js | 15 ++++++ backend/dist/app.js.map | 1 + backend/dist/config/session-store.js | 59 ++++++++++++++++++++++ backend/dist/config/session-store.js.map | 1 + backend/dist/router.js | 6 +++ backend/dist/router.js.map | 1 + backend/dist/routes/session.route.js | 6 +++ backend/dist/routes/session.route.js.map | 1 + backend/dist/websocket/game.js | 84 ++++++++++++++++++++++++++++++++ backend/dist/websocket/game.js.map | 1 + 10 files changed, 175 insertions(+) create mode 100644 backend/dist/app.js create mode 100644 backend/dist/app.js.map create mode 100644 backend/dist/config/session-store.js create mode 100644 backend/dist/config/session-store.js.map create mode 100644 backend/dist/router.js create mode 100644 backend/dist/router.js.map create mode 100644 backend/dist/routes/session.route.js create mode 100644 backend/dist/routes/session.route.js.map create mode 100644 backend/dist/websocket/game.js create mode 100644 backend/dist/websocket/game.js.map (limited to 'backend/dist') 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 -- cgit v1.2.3-70-g09d2