From 95b3f8203079634bb93c41075e26bbe7b2ea09fb Mon Sep 17 00:00:00 2001 From: Alex Pakhomov Date: Thu, 24 Apr 2025 20:31:12 +0200 Subject: [PATCH 1/2] add task solution --- src/index.js | 110 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 109 insertions(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index ad9a93a7c..40969a601 100644 --- a/src/index.js +++ b/src/index.js @@ -1 +1,109 @@ -'use strict'; +import express from 'express'; +import cors from 'cors'; +import { Server } from 'socket.io'; + +const PORT = process.env.PORT || 3005; +const app = express(); + +app.use(cors()); +app.use(express.json()); + + +const messages = []; + +const roomMeta = {}; + +app.post('/messages', (req, res) => { + const { text, username, messageTime } = req.body; + + if (!text || text.trim().length === 0) { + return res.status(400).send('Write something!'); + } + + const message = { + id: Date.now(), + author: username, + text, + messageTime + }; + + io.emit('message', message); + + res.status(200).json({ success: true }); +}); + +const server = app.listen(PORT, () => { + console.log(`Server running at http://localhost:${PORT}/`); +}); + +const io = new Server(server, { + cors: { + origin: '*', + }, +}); + +io.on('connection', (socket) => { + console.log('a user connected'); + + socket.on('getMessages', () => { + socket.emit('messages', messages); + }); + + socket.on('joinToRoom', ({ name }) => { + const roomId = name; + + try { + socket.join(roomId); + + if (!roomMeta[roomId]) { + roomMeta[roomId] = { roomId, name: name || 'Без названия' }; + } + + io.emit('roomList', Object.values(roomMeta)); + + socket.emit('checkRoomResult', { roomId, isMember: true }); + + socket.to(roomId).emit('message', `Пользователь ${socket.id} присоединился`); + } catch (error) { + console.log(error, 'error'); + } + + socket.to(roomId).emit('message', `Пользователь ${socket.id} присоединился`); + }); + + socket.on('renameRoom', (roomId, newName) => { + if (roomMeta[roomId]) { + roomMeta[roomId].name = newName; + + // Уведомляем комнату + socket.to(roomId).emit('message', `Group was renamed to ${newName}`); + + // Обновляем список для всех + io.emit('roomList', Object.values(roomMeta)); + } + }); + + socket.on('checkRoom', (roomId) => { + const isMember = io.sockets.adapter.rooms.get(roomId)?.has(socket.id) || false; + socket.emit('checkRoomResult', { roomId, isMember }); + }); + + socket.on('deleteRoom', (roomName) => { + if (roomMeta[roomName]) { + delete roomMeta[roomName]; + + io.emit('roomList', Object.values(roomMeta)); + } + + socket.leave(roomName); + }); + + socket.on('getRooms', () => { + socket.emit('roomsList', roomMeta); + }); + + socket.on('disconnect', () => { + console.log('user disconnected'); + }); +}); + From 9d047995144e9f44e36b770ed2e8797b93bb6202 Mon Sep 17 00:00:00 2001 From: Alex Pakhomov Date: Thu, 24 Apr 2025 21:10:53 +0200 Subject: [PATCH 2/2] add second task solution --- src/index.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index 40969a601..b1d3350e6 100644 --- a/src/index.js +++ b/src/index.js @@ -28,6 +28,7 @@ app.post('/messages', (req, res) => { }; io.emit('message', message); + messages.push(message); res.status(200).json({ success: true }); }); @@ -67,8 +68,6 @@ io.on('connection', (socket) => { } catch (error) { console.log(error, 'error'); } - - socket.to(roomId).emit('message', `Пользователь ${socket.id} присоединился`); }); socket.on('renameRoom', (roomId, newName) => {