Socket.io / Node.js Сообщение отправлено плохим пользователям - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь сделать систему сообщений (только разговор одного пользователя с одним пользователем) с mongoDB, node.js и socket.io все работает нормально, но когда я отправляю сообщение, все пользователи получают его ... Я будупостарайтесь объяснить вам лучше:

Когда подключены 4 пользователя (2 в одном чате и 2 других в другом чате)

Пользователь 1: Чат

Пользователь 2: Чат a

Пользователь 3: Чат b

Пользователь 4: Чат b

Когда пользователь 1 отправляет сообщение: Пользователь 1, 2, 3,4 см. Сообщение, но только пользователи 1 и 2 сохраняют сообщение в базе данных (поэтому, когда я обновляю всех пользователей: сообщение есть только у пользователей 1 и 2)

И вот проблема, мои сообщения хорошо сохраняются, нокогда кто-то отправляет сообщение, сокет отправляет сообщение всем пользователям подключен

Вот мой код: server.js

var http = require('http');
var MongoClient = require('mongodb').MongoClient;
// Connection URL
const url = 'mongodb://localhost:27017';

// Database Name
const dbName = 'Database';

MongoClient.connect(url, function(err, client) {

if (err)
    throw err;
console.log('MongoDB connected ...');

httpServer = http.createServer(function(req, res) {
    console.log('This is a test');
    res.end('Hello World');
});

httpServer.listen(1337);

var io = require('socket.io').listen(httpServer);
var users = {};
var messages = [];

io.sockets.on('connection', function (socket) {

    const collection = client.db(dbName).collection('MessageUser');

    var me = false;
    var friend = false;
    var conv = false;

    for(var k in users) {
        socket.emit('new_user', users[k]);
    }

    /**
     * Login
     */
    socket.on('login_chat', function (user) {
        me = user;
        friend = user.friend;
        conv = user.conv;
        console.log('New user : ', me.username, ' - id : ', me.id);
        users[me.id] = me;
        io.sockets.emit('new_user', me);
    });

    /**
     * Disconnect
     */
    socket.on('disconnect', function() {
        if (!me) {
            return false;
        }
        delete users[me.id];
        io.sockets.emit('disc_user', me);
    });

    /**
     * Message receive
     */
    socket.on('new_msg', function(message){
        if (message.message !== '') {
            message.user = me;
            date = new Date();
            message.h = date.getHours();
            message.m = date.getMinutes();
            message.y = date.getFullYear();
            message.m = date.getMonth();
            message.d = date.getDate();
            console.log(message);
            messages.push(message);
            msg = {};
            msg.content = message.message;
            msg.sendAt = new Date();
            msg.idTransmitter = me.id;
            msg.idReceiver = friend;
            msg.idConversation = conv;
            collection.insertOne(msg);
            console.log(msg.idReceiver, msg.idTransmitter, me);
            io.sockets.emit('new_msg', message, me, msg.idReceiver, msg.idTransmitter);
        }
    });
});
});

И client.js:

(function($){

var socket = io.connect('http://localhost:1337');
var lastmsg = false;

startTchat = function(user_id, username, friend_id, conv_id) {
    socket.emit('login_chat', {
        id : user_id,
        username : username,
        friend : friend_id,
        conv : conv_id,
    })
};

/**
 * Error
 */
socket.on('error', function(err){
    alert(err);
});

/**
 * Messages
 */
$('#chat_form').submit(function(event){
    event.preventDefault();
    socket.emit('new_msg', {message: $('#message').val() });
    $('#message').val('');
    $('#message').focus();
});

socket.on('new_msg', function(message, me, id_receiver, id_transmiter){
    if (me.id === id_receiver || me.id === id_transmiter) {
        if (lastmsg != message.user.id) {
            *(here i add a div with the msg)*
            lastmsg = message.user.id;
        } else {
            *(here too)*
        }
    }
});


/**
 * Login
 */
socket.on('new_user', function(user){
    *(here i add a div with new user)*
});


/**
 * Disconnect
 */
socket.on('disc_user', function(user){
    $('#' + user.id).remove();
})

})(jQuery);

Моя идея заключалась в следующем: if (me.id === id_receiver || me.id === id_transmiter) (строка client.js 33), но это, похоже, ничего не делает ... Так что я должен добавить немногоhing или, может быть, мое состояние не очень хорошее ...

ps: Я впервые использую node, js и socket, так что я надеюсь, что я объясню и спрошу, нужна ли вам дополнительная информация или скриншоты :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...