web_rtc_example
/
server.js
125 строк · 3.1 Кб
1const path = require('path');2const express = require('express');3const app = express();4const server = require('http').createServer(app);5const io = require('socket.io')(server);6
7const ACTIONS = require('./src/new/socket/actions');8const PORT = 3001;9
10const usersMap = new Map()11
12function getClientRooms() { // Функция возвращает списко всех комнат13const {rooms} = io.sockets.adapter;14
15return Array.from(rooms.keys()).filter(roomID => roomID.split(':')[0] =='room');16}
17
18function shareRoomsInfo() { // Отправляет списко всех комнат всем сокетам19io.emit(ACTIONS.SHARE_ROOMS, {20rooms: getClientRooms()21})22}
23
24io.on('connection', socket => {25shareRoomsInfo();26
27socket.on(ACTIONS.JOIN, config => {28
29const {room: roomID} = config;30const {user} = config;31const {rooms: joinedRooms} = socket;32console.log(`Пользователь вошел в комнату ${roomID}`)33
34if (Array.from(joinedRooms).includes(roomID)) {35return console.warn(`Already joined to ${roomID}`);36}37
38const clients = Array.from(io.sockets.adapter.rooms.get(`room:${roomID}`) || []);39
40usersMap.set(socket.id, {41...user,42socketId:socket.id,43})44const usersArray = Array.from(usersMap);45io.emit(ACTIONS.SHARE_USERS, usersArray);46
47clients.forEach(clientID => {48const user = usersMap.get(clientID)49io.to(clientID).emit(ACTIONS.ADD_PEER, {50peerID: socket.id,51createOffer: false,52user
53});54
55
56
57socket.emit(ACTIONS.ADD_PEER, {58peerID: clientID,59createOffer: true,60user
61});62});63
64socket.join(`room:${roomID}`);65shareRoomsInfo();66});67
68function leaveRoom() {69const {rooms} = socket;70console.log(`Пользователь покинул в комнату`)71Array.from(rooms)72.forEach(roomID => {73if(roomID.split(':')[0]=='room'){74const clients = Array.from(io.sockets.adapter.rooms.get(roomID) || []);75clients
76.forEach(clientID => {77io.to(clientID).emit(ACTIONS.REMOVE_PEER, {78peerID: socket.id,79});80
81socket.emit(ACTIONS.REMOVE_PEER, {82peerID: clientID,83});84});85
86socket.leave(`room:${roomID}`);87}88
89});90
91shareRoomsInfo();92}93
94socket.on(ACTIONS.LEAVE, leaveRoom);95socket.on('disconnecting', leaveRoom);96
97socket.on(ACTIONS.RELAY_SDP, ({peerID, sessionDescription}) => {98console.log(`RELAY_SDP `)99io.to(peerID).emit(ACTIONS.SESSION_DESCRIPTION, {100peerID: socket.id,101sessionDescription,102});103});104
105socket.on(ACTIONS.RELAY_ICE, ({peerID, iceCandidate}) => {106console.log(`RELAY_ICE ${peerID}`)107io.to(peerID).emit(ACTIONS.ICE_CANDIDATE, {108peerID: socket.id,109iceCandidate,110});111});112
113});114
115const publicPath = path.join(__dirname, 'build');116
117app.use(express.static(publicPath));118
119app.get('*', (req, res) => {120res.sendFile(path.join(publicPath, 'index.html'));121});122
123server.listen(PORT, () => {124console.log('Server Started!')125})