riesco solo i messaggi emettere agli utenti quando la loro presa di id è stato memorizzato direttamente all'interno del io.sockets.on ('connect') la funzione. Non so il motivo per cui non funziona quando si cerca di conservare la loro presa id dopo che sono loggatoInvio di un messaggio a un client tramite il suo socket.id
di lavoro:.
Non funziona:
var clients = {};
/** A new socket connection has been accepted */
io.sockets.on('connection', function (socket)
{
//Used to access session id
var hs = socket.handshake;
clients[socket.id] = socket; // add the client data to the hash
socket.on('user-login', function(user){
if(!users['brownj2']){
users['brownj2'] = socket.id; // connected user with its socket.id
}
})
socket.on('page-load', function(pid)
{
if(users['brownj2'])
{
clients[users['brownj2']].emit('hello');
}
else
{
console.log("NOT FOUND BROWNJ2");
}
}
}
Snippet di codice lato client JavaScript
var socket = io.connect('');
socket.on("hello", function(){
alert("Hi Jack");
console.log("WEBSOCKET RECIEVED");
})
Soluzione: Grazie @alessioalex ho dovuto eliminare il riferimento alla socket.io dalla pagina di login, e aggiungere il seguente in io.sockets.on ('connessione')
var hs = socket.handshake;
sessionStore.get(hs.sessionID, function(err, session){
console.log("SESSION: " + util.inspect(session));
clients[socket.id] = socket; // add the client data to the hash
validUsers[session.username] = socket.id; // connected user with its socket.id
})
Grazie, funziona tuttavia quando provo ad usare socket.on ('login', .....) {utenti [u] = socket.id} non funziona. Posso solo aggiungere utenti direttamente all'interno di io.sockets.on ('connessione') – Jack
Sei sicuro? Poiché socket è una variabile definita "above", dovrebbe essere visibile anche in quella funzione, proprio come nel mio esempio con disconnect. – alessioalex
Ho modificato la domanda per mostrarti un esempio funzionante e non funzionante. Non riesco a capire perché non mi consenta di inviare messaggi nell'esempio "non funzionante" sopra riportato. – Jack