2016-06-17 2 views
1

Я более свежую в nodejs и socket.io. Я пытаюсь сделать приложение чата, используя nodejs, socket.io и angularjs в выраженной структуре. Мне не хватает базовой идеи, как чат выполняется в частном порядке. На этом этапе мой код работает в чате в группе подключенных пользователей. Вот мой код серверачастный чат с использованием socket.id on socket.io

var server = require('http').Server(app); 
var io = require('socket.io')(server); 
var socket = require('./routes/socket.js'); 
server.listen(8000); 
console.log('server listening on port:8000'); 
io.on('connection',socket); 

и мой основной сокет файл кода consit как:

module.exports = function(socket){ 
console.log('connected'+' '+'socketId :'+socket.id);  
//console.log(req.session.id); 
var users =[]; 
socket.emit(socket.id); 

socket.on('username',function(data){ 
    users.push({id:socket.id,message:data.username});   
    socket.emit('username', users) 

})  
    socket.on('typing',function(data){ 
    //socket.emit('typing',{message:"helo angular"}); 
    socket.broadcast.emit('typing',{message:data.message}); 
}); 
    socket.on('typing-stop',function(data){ 
    //socket.emit('typing',{message:"helo angular"}); 
    debugger; 
    socket.broadcast.emit('typing-stop',{message:data.message}); 
}); 
socket.on('new-user',function(data){ 
    socket.emit('new-user',data); 
    socket.broadcast.emit('new-user',data); 
}) 

socket.on('message',function(data){ 
    users.push({message:data.message});   
    socket.emit('message',{id:socket.id,message:data.message}); 
    socket.broadcast.emit('message',{id:socket.id,message:data.message});// emit the message to every one connected in server 
}) 

socket.on('disconnect',function(){ 
     console.log('user disconnected');   
     socket.broadcast.emit('disconnected',{'message':'user left the chat room'}); 
    }); 
} 

я Абэ, чтобы загрузить все пользователи, которые получают регистрируемые в мое приложение. все, что я хочу, - это щелкнуть мышью на доступный и начать приватный обмен сообщениями, до сих пор чат является общедоступным, все подключенные к серверу могут видеть сообщение. мой код angularjs контроллер идет как:

function orgController(notifyService, chatSocket, $state,$http) { 
    chatSocket.connect(); 

    var vm = this; 
    vm.sendMessage = sendMessage; 
    vm.messages = []; 
    vm.users = [];  

    var id = $state.params.id; 
    $http.get('/users/' + id).then(function(result) { 
    console.log(result.data); 
    vm.userData = result.data; 
    chatSocket.emit('new-user', { 'username': result.data.details.firstName    + ' ' + result.data.details.lastName }); 
    }); 
     chatSocket.on('new-user',function(data){ 
    vm.users.push(data); 
    }) 
    function sendMessage(msg) { 
    //console.log(msg); 
    if (msg != null && msg != '') { 
     chatSocket.emit('message', { message: msg }); 
     vm.msg = ''; 
    } else { 
     vm.msg = ''; 
    } 
    } 
    chatSocket.on('message', function(data) { 
    //debugger; 
    console.log(data); 
    vm.messages.push(data); 
    }); 
} 

Примечание: я включил angular-socket.io модули и ввести свою зависимость в службе называется chatSocket, которые возвращают только SocketFactory.

сейчас я хочу нажать на пользователя из списка пользователей и начать общение. как я могу это сделать из (socket.id). какой сокет генерирует или из идентификатора сеанса? у кого-то есть лучший способ сделать это. любые предложения и ответы высоко ценятся.

ответ

1

В основном, что вам нужно сделать, это передать событие определенному сокету, подобному этому.

io.to(socket.id).emit('privateMessage', {message: <message goes here>}); 

затем на стороне клиента

socket.on('privateMessage', function(data){ 
    var message = data.message; 
    //do stuff, display message etc... 
}); 
+0

я иметь отдельный JS файл в папку маршрутов, который кодирует подобен: module.exports = функция (розетка) { socket.on ('сообщение' , функция (данные) { //console.log(data); //socket.emit('message',{message:data.message}); socket.broadcast.to (data.id) .emit ('message', {'message': data.message, 'id': data.id, 'name': data.name}); // выдавать сообщение каждому подключенному к серверу }) } is'nt его правильно? я не получаю сообщение – jsgeek

+0

Я не уверен, что 100% вы пытаетесь сделать здесь. Вы получаете сообщение, а затем используете socket.emit, а затем также используете socket.broadcast. Вы хотите отправить эту часть всем? Или только один определенный сокет? – Williz

Смежные вопросы