Sending message to all client works well but I want to send message to particular username. my server.js file looks like. What it does is when http://localhost:8080
is run, the client code adds user to the object usernames as well as in socket object. And instantly returns the individual message to each of the connected client.
//var io = require('socket.io').listen(8080);
var app = require('http').createServer(handler)
, io = require('socket.io').listen(app)
, fs = require('fs')
var usernames={};
app.listen(8080);
// on server started we can load our client.html page
function handler ( req, res ) {
fs.readFile( __dirname + '/client.html' ,
function ( err, data ) {
if ( err ) {
console.log( err );
res.writeHead(500);
return res.end( 'Error loading client.html' );
}
res.writeHead( 200 );
res.end( data );
});
};
io.set('log level', 1); // reduce logging
io.sockets.on('connection', function (socket) {
socket.on('adduser', function(username){
// store the username in the socket session for this client
socket.username = username;
// add the client's username to the global list
usernames[username] = username;
// send client to room 1
console.log(username+' has connected to the server');
// echo to client they've connected
});
socket.on('pmessage', function (data) {
// we tell the client to execute 'updatechat' with 2 parameters
io.sockets.emit("pvt",socket.username,data+socket.username); // This works
io.sockets.socket(socket.username).emit("pvt",socket.username,data+socket.username); // THIS DOESNOT
});
socket.on('disconnect', function(){
// remove the username from global usernames list
delete usernames[socket.username];
// echo globally that this client has left
console.log(socket.username + ' has disconnected');
});
});
The portion that emits message
socket.on('pmessage', function (data) {
// we tell the client to execute 'updatechat' with 2 parameters
io.sockets.emit("pvt",socket.username,data+socket.username); // This works and sends message to all clients
io.sockets.socket(socket.username).emit("pvt",socket.username,data+socket.username); // THIS DOESNOT
});
You have to store all client ids and according to that you have to get id of particular client and then you use following code
Then this will emit on particular client
Try this:
socket.id is saved by socket.io and it contains unique id of your client. You can check that using this: