aboutsummaryrefslogtreecommitdiffstats
path: root/backend/dist/websocket/game.js
blob: 35d7ad894efa3ea83ba895ddcff327fe5ff8898d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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