Я кодирую видеочат, используя WebRtc и Socket.io для соединения.Чтобы начать вызов, вам нужно создать комнату, сервер получает идентификатор комнаты, создает комнату и позволяет вам присоединиться.Теперь я хочу отправить в широковещательную рассылку сообщение, чтобы другие клиенты знали, что комната была создана и что они могут присоединиться, нажав кнопку.
Вот код для создания комнаты:
1.
//client side
function createRoom(){
var room = window.location.hash = randomToken();
socket.emit('create or join', room);
}
2.
//server side
socket.on('create or join', function(room) {
log('Received request to create or join room ' + room);
var clientsInRoom = io.sockets.adapter.rooms[room];
var numClients = clientsInRoom ? Object.keys(clientsInRoom.sockets).length : 0;
log('Room ' + room + ' now has ' + (numClients + 1) + ' client(s)');
if (numClients === 0) {
socket.join(room);
log('Client ID ' + socket.id + ' created room ' + room);
socket.emit('created', room, socket.id);
} else if (numClients === 1) {
log('Client ID ' + socket.id + ' joined room ' + room);
// io.sockets.in(room).emit('join', room);
socket.join(room);
socket.emit('joined', room, socket.id);
io.sockets.in(room).emit('ready', room);
socket.broadcast.emit('ready', room);
} else { // max two clients
socket.emit('full', room);
}
});
3.
//client side again
socket.on('created', function(room, clientId) {
console.log('Created room', room, '- my client ID is', clientId);
isInitiator = true;
socket.emit('readyToJoin', room);
grabWebCamVideo();
});
Как видите, у меня есть проверка количества клиентов в комнатепоэтому, если вы попытаетесь создать комнату, которая уже была создана, вы присоединитесь к ней.
Обычно, когда я создаю комнату, я хочу отправить широковещательное сообщение другим подключенным клиентам,отправив им номер тоже, поэтому первым из них, который нажимает кнопку «JoinRoom», он эффективно присоединяется.
Я попытался добавить «.broadcast».на стороне сервера ( socket.broadcast.emit ('созданный', комната, socket.id); ), но это не работает для меня, и если это работает, я не знаю, каксохранить переменную комнаты на стороне клиента.Моя кнопка joinRoom выглядит так:
function joinRoom(){
var roomId = room;
socket.emit('create or join', roomId);
}
Спасибо за помощь