aboutsummaryrefslogtreecommitdiffstats
path: root/backend/dist/websocket/game.js
diff options
context:
space:
mode:
authorLeonardo Bishop <me@leonardobishop.com>2023-11-04 21:28:11 +0000
committerLeonardo Bishop <me@leonardobishop.com>2023-11-04 21:28:11 +0000
commit7d8cca54e548d2a85287fd2325db88f2697be55a (patch)
tree3daa82c6a709363f2f08d9f875d849e4babe1f8f /backend/dist/websocket/game.js
parente1633f3348ff7fc5e9131eeae2f2feba09f04838 (diff)
Add more shit
Diffstat (limited to 'backend/dist/websocket/game.js')
-rw-r--r--backend/dist/websocket/game.js84
1 files changed, 84 insertions, 0 deletions
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