Я схожу с ума от этого. Я новичок в Javascript, я уже делал это с PHP в двумерных массивах, но у меня заканчиваются варианты с JS.
Я пытаюсь начать работу с Socket.io и я хочу создать объект (или массив) для обработки на нем комнат и пользователей.
Например, я хотел бы управлять им следующим образом:
rooms = {
roomname: [
{
id: id1,
name: "foo",
},
{
id: id2,
name: "bar",
},
],
roomname2: [
{
id: id3,
name: "Juan",
},
{
id: id4,
name: "Pablo",
},
],
};
Это часть код и то, что я делал до сих пор.
//Client side is sending:
socket.emit("join", { name, room, img });
//Server side is getting:
const { addUser } = require("./functions.js");
socket.on("join", ({ name, room, img }, callback) => {
const { error, user } = addUser({
id: socket.id,
name,
room,
img: img,
});
});
//And addUser function is:
rooms = {};
const addUser = ({ id, name, room, img }) => {
const user = { id, name, img, room };
rooms = { ...rooms, [room]: [] };
rooms[room].push(user);
console.log(rooms)
}
И когда я открываю двух клиентов и пытаюсь войти в две разные комнаты, я получаю что-то вроде этого:
{
'room123': [
{
id: 'PdKPyzXv64Wt2YPlAAAO',
name: 'jugador76749',
img: '0',
room: 'room123',
}
],
'room999': [
{
id: 'PdKPyzXv64Wt2YPlAAAO',
name: 'jugador4344',
img: '0',
room: '999',
}
]
}
НО, если я пытаюсь присоединиться к той же комнате, я получаю только последнего пользователя:
'room999': [
{
id: 'PdKPyzXv64Wt2YPlAAAO',
name: 'jugador4344',
img: '0',
room: '999'
}
]
Я знаю, что сбрасываю массив каждый раз, когда делаю это: rooms = { ...rooms, [room]: [] };
но я не могу найти способ инициализировать массив перед.
Я ценю вашу помощь,
спасибо.