Estoy usando node.js y sockets y necesito obtener datos de un socket en una habitación, luego, cuando un nuevo socket se une a una habitación, comparto esos datos con la nueva sesión.
Más específicamente, estoy intentando iniciar un temporizador en el lado del cliente en el primer enchufe de la habitación, luego pasar la posición actual del temporizador al siguiente enchufe que se une a la habitación.
Estoy usando un temporizador básico como este en el lado del cliente:
setInterval(timer, 1000); var seconds = 0; function timer(seconds){ socket.emit('clientTimer', seconds); seconds++; return seconds; }En el lado del servidor, estoy escuchando el temporizador, luego quiero emitir esa información del temporizador al siguiente socket que se une a la sala.
socket.on('clientTimer', function(seconds){ socket.emit('newClientTimer', seconds); });Como estoy usando el mismo archivo js para ambos sockets, tengo esto en el lado del cliente:
socket.on('newClientTimer', function(seconds){ console.log(seconds); });El problema aquí es que solo emite el temporizador al cliente original con la hora actual, y el nuevo cliente comienza de nuevo en 0. Así que ahora tengo dos temporizadores en lugar de uno.
¿Es posible tomar solo la posición actual del temporizador y pasarla del servidor a la nueva conexión de la sala de forma no asíncrona? O si esa es la forma incorrecta de formular mi pregunta, sugiera una mejor y actualizaré mi título.
Lamento decirlo, pero parece que hay un largo camino por recorrer antes de que el código haga lo que estás describiendo.
El servidor no transmite el temporizador a otros clientes.
socket.on('clientTimer', function(seconds){ socket.emit('newClientTimer', seconds); });Deberá enviarlo a otros sockets. Tampoco puedo publicar un fragmento de código "fijo", porque no está claro cómo se realiza un seguimiento de los enchufes conectados a los otros clientes en la sala.
Este código envía el temporizador de regreso al mismo socket de donde lo recibió.
Cada nuevo cliente comienza en cero porque usa la misma página, que se inicializa con
var seconds = 0;Tal vez esté tratando de recibir un valor de temporizador en el cliente con
socket.on('newClientTimer', function(seconds){ console.log(seconds); }); pero no funciona, porque el argumento llamado seconds es su propia variable y no actualiza la variable var seconds en el ámbito externo. Debido a que el nombre del argumento sombrea la variable exterior, ahora ni siquiera puede asignar de uno a otro.
Probablemente quieras algo como
socket.on('newClientTimer', function(newSeconds){ console.log(newSeconds); seconds = newSeconds; });