diff options
| author | Martial Simon <msimon_fr@hotmail.com> | 2025-09-15 01:08:27 +0200 |
|---|---|---|
| committer | Martial Simon <msimon_fr@hotmail.com> | 2025-09-15 01:08:27 +0200 |
| commit | c9b6b9a5ca082fe7c1b6f58d7713f785a9eb6a5c (patch) | |
| tree | 3e4f42f93c7ae89a364e4d51fff6e5cec4e55fa9 /graphs/js/advancedCommunication | |
add: graphs et rushs
Diffstat (limited to 'graphs/js/advancedCommunication')
| -rw-r--r-- | graphs/js/advancedCommunication/client.js | 26 | ||||
| -rw-r--r-- | graphs/js/advancedCommunication/server.js | 88 |
2 files changed, 114 insertions, 0 deletions
diff --git a/graphs/js/advancedCommunication/client.js b/graphs/js/advancedCommunication/client.js new file mode 100644 index 0000000..7c051a8 --- /dev/null +++ b/graphs/js/advancedCommunication/client.js @@ -0,0 +1,26 @@ +const WebSocket = require("ws"); + +function addClient(userName) { + const socket = new WebSocket("ws://localhost:8080?username=" + userName); + + socket.on("open", () => { + socket.send(userName + ": trying to establish connection"); + }); + socket.on("close", (code, reason) => { + console.log( + "<server to " + + userName + + ">: Connection has been closed: [" + + code + + "] " + + reason, + ); + }); + socket.on("message", (data) => { + console.log("<server to " + userName + ">: " + data); + }); + return socket; +} +module.exports = { + addClient, +}; diff --git a/graphs/js/advancedCommunication/server.js b/graphs/js/advancedCommunication/server.js new file mode 100644 index 0000000..e642396 --- /dev/null +++ b/graphs/js/advancedCommunication/server.js @@ -0,0 +1,88 @@ +const WebSocket = require("ws"); + +function startServer() { + const server = new WebSocket.Server({ port: 8080 }); + const connections = new Array(); + let maxID = 0; + + console.log("Websocket server is running on port 8080."); + server.on("connection", (socket, request) => { + const userName = request.url.substring(11); + + maxID++; + const current_connection = { + userName: userName, + id: maxID, + socket: socket, + }; + + socket.on("message", (data) => { + console.log("[" + current_connection.id + "] " + data); + }); + socket.on("close", (code, reason) => { + console.log( + "[" + + current_connection.id + + "] Disconnected: [" + + code + + "] " + + reason, + ); + if (code !== 1008) { + for (const conn of connections) { + if (conn.id !== current_connection.id) { + conn.socket.send(userName + " disconnected"); + } + } + + connections.splice(connections.indexOf(current_connection), 1); + } + }); + for (const conn of connections) { + if (conn.userName === userName) { + socket.close( + 1008, + 'Username: "' + userName + '" is already taken', + ); + return; + } + } + + socket.send("Welcome " + userName); + connections.push(current_connection); + if (connections.length === 1) { + socket.send(userName + ", you are the only player connected"); + } else { + socket.send(connections.length + " players are connected"); + } + + for (const conn of connections) { + if (conn.userName !== userName) { + conn.socket.send(userName + " connected"); + } + } + + if (connections.length < 4) { + for (const conn of connections) { + conn.socket.send( + "Waiting for " + + (4 - connections.length) + + " other players to start the game", + ); + } + } else { + for (const conn of connections) { + conn.socket.send( + "Match will start soon, disconnecting " + + conn.userName + + " from the lobby", + ); + conn.socket.close(1000, "Match is starting"); + } + } + }); + return server; +} +module.exports = { + startServer, +}; |
