Я создаю простой чат, используя этот руководство.
Когда кто-то входит в систему, его имя добавляется в список онлайн-пользователей. Однако каждый пользователь не должен видеть свое имя в списке, только имена других пользователей. Любые предложения, что я должен добавить / изменить в своем коде, чтобы это исправить?
Сторона клиента:
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]);
});
2 ответа
Я нашел решение своей проблемы. Я обновил свой вопрос с правильным кодом. В основном нужно было обновить пользователей ДО того, как новому пользователю будет присвоен идентификатор, имя и т. Д. После этого этот новый пользователь передал свое имя другим пользователям.
Если этим людям назначен какой-то идентификатор, то вы можете иметь условие в вашем цикле, чтобы не добавлять пользователя сам. if(obj.id !== currentUser.id) { $'#people').append(... }
Конечно, вы также можете использовать имя пользователя или другую информацию.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.