Привет
Всем привет, идея в том, что бы реализовать таймер обратного отсчета, для разных страниц
Клиент
( _id Это уникальный id для каждой страниц, страниц много поэтому у каждой свой таймер )
То есть клиент заходит на страницу, на странице есть кнопка обновить
таймер, при нажатии срабатывает событие offer
socket.emit('connectRoom', { id_room : _id });
socket.on("timerUpdate", data => console.log(data) );
socket.emit('offer', { id_room : _id });
Сервер
io.on('connection', function(socket){
let obj = { time : null };
// Создаем отдельную комнату для текущей страницы
socket.on('connectRoom', function(data){
socket.join(data.id_room);
});
// Функция таймера
let timer = (id_room) => {
let i = 60;
obj.time = setInterval(() => {
io.sockets.in(id_room).emit('timerUpdate', i);
i--;
}, 1000);
};
// При получении события обновить удаляем старый таймер
// и запускаем новый
socket.on('offer', function(data){
clearInterval(obj.time);
timer(data.id_room);
});
});
Все работает не так как хотелось, то есть клиент заходит на определенную страницу, запускает таймер кнопкой обновить
таймер запускается и все работает хорошо
Если заходит новый клиент на ту же страницу он видит текущий таймер
И это тоже здорово
Но если новый клиент обновит таймер то функция clearInterval не срабатывает и в консоли следующая картина
Запустил таймер 1 клиент
60
59
58
…
…
Зашел новый клиент и обновил таймер
60
57
59
56
58
…
…
…
То есть работают 2 таймера одновременно, соответсвено если 3 клиент обновит таймер то уже 3 параллельных таймера
Вопрос в том, как избежать такое поведение и сделать один общий таймер для текущей комнаты