2014-02-24 53 views
1

我正在嘗試開發一個聊天應用程序,並具有發送私人消息的能力。我一直堅持了一個多星期。私人信息部分不能正常工作。NodeJS Socket.io私人消息代碼不起作用

這是我的代碼,當用戶想要發送私人消息: 它基本上檢查用戶是否在線,並且如果從用戶dict獲取該用戶的套接字。並將其廣播給該用戶以及自己發送該用戶的用戶。

socket.on('send message', function(data, callback){ 
var msg = data.trim(); 

var name = req.params.posteruname; 

    if(name in users){ 
    users[name].emit('new message', {msg: msg, nick: socket.nickname}); 
    users[req.user.username].emit('new message', {msg: msg, nick: socket.nickname}); 
} 
else{ 
    callback('Error! Enter a valid user.'); 
} 


}); 

這裏是客戶端代碼:

socket.on('new message', function(data){ 
if(data.nick == "{{reciever}}" || data.nick == "{{user.username}}") { 
displayMsg(data); 
} 
    }); 

它基本上再次檢查,如果是正被廣播到接收器或發送器。

下面是當新用戶加入的代碼:

socket.on('new user', function(data, callback){ 
     if (data in users){ 
      callback(false); 
     } else{ 
     console.log(users); 
     callback(true); 
     socket.nickname = req.user.username; 
     users[socket.nickname] = socket; 
     updateNicknames(); 
     console.log(users); 
    } 
    }); 

    function updateNicknames(){ 
    io.sockets.emit('usernames', Object.keys(users)); 
    } 

每次我試圖發送一個消息,它不會發件人的屏幕上顯示,並這樣做兩次接收器的屏幕上。而當第三個用戶連接時,發送消息只會在第三個用戶的屏幕上廣播,即使它應該位於user1和user2之間。

回答

0

嗨,我們這個代碼服務器端: var socketConnections = {};

socket.on('userID',function(data) 
{ 
    socket.userID=data.userID; 
    socketConnections[socket.userID]; 

}); 
socket.on('sendMessage',function(data){ 

     socketConnection[data.receiverID].emit('message',{message:data.message,senderID:socket.userID}); 
}); 

客戶端代碼

socket.emit('userID',{userID:'anyUniqueID'}); 

socket.emit('sendMessage',{message:'hi this murugan',receiverID:'uniqueReceiverID'}); 

socket.on('message',function(data){ 
//Private message  
console.log(data.message); 

});

+0

我試過了,它不起作用。我只是想知道,它與我所擁有的有什麼不同? – blehadfas1

+0

發佈您的客戶端和服務器端代碼 –

+0

我發佈了它。現在檢查問題。 – blehadfas1