Я создаю простой чат, используя этот руководство.

Когда кто-то входит в систему, его имя добавляется в список онлайн-пользователей. Однако каждый пользователь не должен видеть свое имя в списке, только имена других пользователей. Любые предложения, что я должен добавить / изменить в своем коде, чтобы это исправить?

Сторона клиента:

socket.on("update-people", function(data, id){
          $("#people").empty();
          $.each(data.people, function(a, obj, id) {
              $('#people').append("<li class=\"people-item\"><a href=\"#\" class=\"list-group-item\"><span class="+obj.id+">" + obj.name + "</span></a></li>");
          });
        });

        socket.on("update-people-withSelf", function(people){
          $('#people').append("<li class=\"people-item\"><a href=\"#\" class=\"list-group-item\"><span class="+people.id+">" + people.name + "</span></a></li>");
        });

На стороне сервера :

// Setting up the server
var express = require('express');
var app = express();
var path = require('path');
var server = require('http').createServer(app);
var socket = require("socket.io").listen(server);
var Room = require('./room.js');
var Conversation = require('./conversation.js');
var _ = require('underscore')._;
var uuid = require ('uuid');
server.listen(process.env.PORT || 3000);
console.log('Server is running...');

socket.set("log level", 1);
var people = {};  
var rooms = {};
var conversations = {};
var clients = [];
var chatHistory = {};

Array.prototype.contains = function(k, callback) {  
    var self = this;
    return (function check(i) {
        if (i >= self.length) {
            return callback(false);
        }
        if (self[i] === k) {
            return callback(true);
        }
        return process.nextTick(check.bind(null, i+1));
    }(0));
};



// Gets the html file
app.get('/', function(req, res){
	res.sendFile(__dirname + '/index.html');
})

// Gets the css file
app.use(express.static(path.join(__dirname, 'public')));

// When connecting
socket.on("connection", function(client) {
	client.on("join", function(name){
		client.emit("update-people", {people: people});
		sizePeople = _.size(people);
		socket.sockets.emit("update-peopleCount", {people: people, count: sizePeople});
		var ownerRoomID = inRoomID = null;
		roomID = null;
		conversationID = null; // This line probably has to go, since users should be able to create several conversations.
		people[client.id] = {"name" : name, "owns" : ownerRoomID, "inroom" : inRoomID, "id" : client.id, "room" : roomID, "conversation" : conversationID};
		var id = uuid.v4();
		//sizePeople = _.size(people);
		sizeRooms = _.size(rooms);
		sizeConversations = _.size(conversations);
		//socket.sockets.emit("update-peopleCount", {people: people, count: sizePeople});
		//socket.sockets.emit("update-people", {people: people});
		socket.sockets.emit("roomList", {rooms: rooms, count: sizeRooms});
		socket.sockets.emit("update-conversations", {conversations: conversations, count: sizeConversations});
		client.emit("updateToSelf", "You have connected to the server. Start conversation or create/join room to chat");
		client.broadcast.emit('updateToOthers', name + " is online.");
		clients.push(client); //populates the clients array with the client object
		console.log("Someone joined the chat", people[client.id].id);
		//client.broadcast.emit("sendingOwnName", people[client.id].id);
		client.broadcast.emit("update-people-withSelf", people[client.id]);
	});
0
JonasSH 24 Апр 2017 в 09:32

2 ответа

Лучший ответ

Я нашел решение своей проблемы. Я обновил свой вопрос с правильным кодом. В основном нужно было обновить пользователей ДО того, как новому пользователю будет присвоен идентификатор, имя и т. Д. После этого этот новый пользователь передал свое имя другим пользователям.

0
JonasSH 28 Апр 2017 в 11:45

Если этим людям назначен какой-то идентификатор, то вы можете иметь условие в вашем цикле, чтобы не добавлять пользователя сам. if(obj.id !== currentUser.id) { $'#people').append(... } Конечно, вы также можете использовать имя пользователя или другую информацию.

0
resu9561 24 Апр 2017 в 06:40