Initial server state
This commit is contained in:
@ -8,7 +8,7 @@ module.exports.connectUserToRoom = (roomId, user) => {
|
||||
} else {
|
||||
rooms[roomId] = {members: [{...user, creator: true}], settings: {}};
|
||||
}
|
||||
console.log(JSON.stringify(rooms));
|
||||
console.log(`User ${user.name} connected to room ${roomId}`);
|
||||
}
|
||||
|
||||
module.exports.getUserRoom = (userId) => {
|
||||
@ -18,6 +18,21 @@ module.exports.getUserRoom = (userId) => {
|
||||
|
||||
if (memberIndex !== -1) return roomId;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
module.exports.getRoomUsers = (roomId) => {
|
||||
if (rooms[roomId]) {
|
||||
return rooms[roomId].members;
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
module.exports.getRoomCreator = (roomId) => {
|
||||
if (rooms[roomId]) {
|
||||
return rooms[roomId].members.find(member => member.creator);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
module.exports.disconnectUser = (userId) => {
|
||||
@ -26,12 +41,17 @@ module.exports.disconnectUser = (userId) => {
|
||||
const memberIndex = room.members.findIndex(member => member.id === userId);
|
||||
|
||||
if (memberIndex !== -1) {
|
||||
if (room.members[memberIndex].creator) {
|
||||
if (room.members.length > 1) room.members[1].creator = true;
|
||||
if (room.members[memberIndex].creator && room.members.length > 1) {
|
||||
room.members[1].creator = true;
|
||||
}
|
||||
|
||||
room.members.splice(memberIndex, 1);
|
||||
if (room.members.length === 0) delete rooms[roomId];
|
||||
console.log(`User ${userId} disconnected from room ${roomId}`);
|
||||
|
||||
if (room.members.length === 0) {
|
||||
delete rooms[roomId];
|
||||
console.log(`Room ${roomId} deleted because it's empty`);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
@ -1,7 +1,8 @@
|
||||
const {connectUserToRoom, roomExists, disconnectUser, getUserRoom} = require("../controller/room");
|
||||
const {connectUserToRoom, roomExists, disconnectUser, getUserRoom, getRoomUsers} = require("../controller/room");
|
||||
|
||||
module.exports = (socket) => {
|
||||
let currentRoomId = null;
|
||||
let currentUser = null;
|
||||
|
||||
socket.on("disconnect", () => {
|
||||
const roomId = getUserRoom(socket.id);
|
||||
@ -14,9 +15,10 @@ module.exports = (socket) => {
|
||||
if (currentRoomId) return socket.emit("already-in-room", currentRoomId);
|
||||
|
||||
if (roomExists(roomId.toString())) {
|
||||
connectUserToRoom(roomId, {id: socket.id, name: name.toString()});
|
||||
currentUser = {id: socket.id, name: name.toString()};
|
||||
connectUserToRoom(roomId, currentUser);
|
||||
socket.join(roomId);
|
||||
socket.to(roomId).emit("user-connected", {name: name.toString(), id: socket.id});
|
||||
socket.to(roomId).emit("user-connected", currentUser);
|
||||
socket.emit("room-joined", roomId);
|
||||
currentRoomId = roomId;
|
||||
} else {
|
||||
@ -27,10 +29,31 @@ module.exports = (socket) => {
|
||||
socket.on("create-room", ({name}) => {
|
||||
if (!name) return socket.emit("room-name-required");
|
||||
const roomId = Math.random().toString(36).substring(7);
|
||||
connectUserToRoom(roomId, {id: socket.id, name: name?.toString()});
|
||||
currentUser = {id: socket.id, name: name?.toString()};
|
||||
connectUserToRoom(roomId, currentUser);
|
||||
socket.join(roomId);
|
||||
socket.emit("room-created", roomId);
|
||||
currentRoomId = roomId;
|
||||
});
|
||||
|
||||
socket.on("send-message", (messageData) => {
|
||||
const roomId = getUserRoom(socket.id);
|
||||
if (roomId) {
|
||||
socket.to(roomId).emit("chat-message", messageData);
|
||||
}
|
||||
});
|
||||
|
||||
socket.on("get-user-info", () => {
|
||||
if (currentUser) {
|
||||
socket.emit("user-info", currentUser);
|
||||
}
|
||||
});
|
||||
|
||||
socket.on("get-room-users", () => {
|
||||
const roomId = getUserRoom(socket.id);
|
||||
if (roomId) {
|
||||
const users = getRoomUsers(roomId);
|
||||
socket.emit("room-users", users);
|
||||
}
|
||||
});
|
||||
}
|
Reference in New Issue
Block a user