web-dev-qa-db-fra.com

chat privé avec socket.io

J'ai des problèmes avec mon application de chat. Je dois pouvoir envoyer un message privé à un utilisateur spécifique. J'ai pu sélectionner cet utilisateur mais, pour une raison quelconque, je ne savais pas comment envoyer le message privé.

Vous trouverez ci-dessous le code de mon serveur. Aidez-moi:

var express = require('express');
var app = express();
var PORT = process.env.PORT || 8000;
var http = require('http').Server(app); // this is a node server that uses express as the boiler plate
var io = require('socket.io')(http); // socket! pass our server as a parameter to it


// use express static to expose a folder
app.use(express.static(__dirname + '/public'));

var users = [],
	connections = [];
var onlineClients = {};




// Register events on socket connection
io.on('connection', function(socket){ 
	connections.Push(socket);
	// console.log("connected socket", connections);

	socket.on("disconnect", function() {
		users.splice(users.indexOf(socket.username), 1);
		updateUsernames();
		connections.splice(connections.indexOf(socket), 1);
		console.log("disconnected socket", connections.length)
	});

	socket.on("send message", function(data) {
		// console.log(data);
		io.emit("new message", {msg: data, user: socket.username});
	});


	socket.on("notify user", function(data) {
		io.emit("notify user", {user: socket.username})
	});


	socket.on("new user", function(data) {
		socket.username = data;
		users.Push(socket.username);
		updateUsernames();

	});

	function updateUsernames() {
		io.emit("get users", users);
	};

	socket.on("private", function(data, recipientName) {
		var recipient = connections.filter(function (recipient) {
			return recipient.username === recipientName;
		})[0];
			console.log(recipient.id);
			console.log(data);
		io.sockets.socket(recipient.id).emit("received private msg", data);

	});


	// socket.on("create room", function(room) {
	// 	socket.join(room);
	// 	io.sockets.in(room).emit('event', "hey wusup am in this room");
	// 	console.log(socket);

	// })

});

http.listen(PORT, function(){
  console.log('Server started on port ' + PORT);
});

6
cickStar
  • Commencez par ajouter un utilisateur dans la salle de discussion afin de trouver facilement un utilisateur dans votre salle de discussion privée.
  • Votre code client pour rejoindre la salle privée

    <input type="text" class="form-control" id="user_email" placeholder="user_email" /> <button text="join room" class="btn btn-primary btn-block" onclick="a();"> Join Room</button>

  • votre code javascript côté client

    function a(){ io.emit('privatechatrrom', {email:document.getElementById('user_email').value}); }

  • votre code côté serveur pour ajouter un utilisateur dans votre chambre

    socket.on('privatechatroom',function(data){ socket.join(data.email); io.emit('res',{mes:"you are added"}) });

vous pouvez maintenant envoyer un message privé à cette personne récemment ajoutée à cette salle côté client 

function b()
{
  io.emit('sendmail',{email:document.getElementById('sender_mail').value,message:document.getElementById('message').value});
  $('#message').val('');
}


/*serverside code*/socket.on('sendmail',function(data)
{
    io.sockets.in(data.email).emit('new_msg', {msg: data.message});
            console.log(data.email);
});
5
Adiii

Voici la solution claire de ma question pour votre question ...

Envoyer un message à un client particulier (chat privé)

J'espère que cela fonctionnera pour vous poursuivre en justice ..

0
Trojan