rooms
For explanation about namespace usage for Socket.io see: Socket.io/rooms
Rooms are used here to split socket ui client and socket DCC client.
You can broadcast event to all client present in rooms, which is very useful.
File Structure
📦rooms
┣ 📜dcc.js
┗ 📜ui.js
To create a new room, you juste have to create .js files under /rooms directory
Code Example
const dccNamespace = require("../namespaces/dcc/dcc");
const dccRoomJoin = (socket) => {
// you have 2 main function for a room : join and to
console.log("join dccRoom"); // join need the socket client
return socket.join("dccRoom");
};
const dccRoomTo = (io) => {
// <== "to" need the object server : io
return dccNamespace(io).to("dccRoom"); // <== you can bind your room to a namespace like this
};
module.exports = { dccRoomJoin, dccRoomTo }; // <== export these 2 methods
Usage
// listeners/dcc.js
...
/** ROOMS */
const { dccRoomJoin } = require("../rooms/dcc") // <== room are import here
module.exports = function (io) {
dccNamespace(io).on("connection", function (socket) {
dccRoomJoin(socket) // <== join are called here
initializationEvent(socket, io)
diconnectEvent(socket, io) // code of this below ...
})
// events/dcc/disconnect.js
const store = require("../../store")
const { uiRoomTo } = require("../../rooms/ui") // <== To are import here
const disconnect = (socket, io) => {
socket.on("disconnect", (data) => {
// get uuid from data
const uuid = data.uuid
if (uuid && store.dccs[uuid]) {
delete store.dccs[uuid]
}
uiRoomTo(io).emit("dccDisconnect", { uuid: socket.data.uuid }) // <== to emit on all socket client in the namespaces+rooms
})
}
module.exports = disconnect