2014-10-10 4 views
5

seguito è riportato il codice sul front-end, dove storeSelUserId contiene id_utente per inviare il messaggio-Invia a determinati utenti che utilizzano socket.io

FYI - Nodo Versione 1.1.0

// Socket Notification 
var socket = io('http://localhost:6868'); 
socket.on('connection', function (data) { 
    socket.emit('send notification', { sent_to: storeSelUserId }); 
}); 

di seguito è riportato il codice del server nel file di rotte -

var clients = {}; 
io.on('connection', function (socket) { 
    socket.emit('connection', "Connection Created."); 
    socket.on('send notification', function (sent_to) { 
    console.log(sent_to); 
    }); 
}); 

nella console sent_to sta mostrando la array di user_id.

Ora essendo un antipasto in socket.io Mi sono bloccato con la soluzione che come faccio a inviare il messaggio a questi particolari userid.

che cerco e ho trovato che ho bisogno di spingere ogni utente con i suoi zoccoli così ho riformato a -

var users = []; 
io.on('connection', function (socket) { 
    users.push({socket_id: socket.id}); 
    socket.emit('connection', "Connection Created."); 
    socket.on('send notification', function (sent_to) { 
    console.log(sent_to); 
    }); 
}); 

Ma io sono nel dilemma che altro devo fare per memorizzare gli user_id si riferisce a cui socket_id e quindi aggiornare il div degli utenti con quel particolare id?

EDIT -

Aggiungi Controller - (Front End)

Interfaccia Front end in cui viene creato memo e invio a determinati utenti

var socket = io('http://localhost:6868'); 
socket.on('connection', function (data) { 
    socket.emit('send memo notification', {creator_id: creator_id, sent_to: [Array of user_ids to whom memo to send]}); 
}); 

regolatore Dashboard - (Front End)

fine interfaccia frontale dove conta di notifica per mostrare "notificationCount"

if (SessionService.currentUser._id) { 
    var socket = io('http://localhost:6868'); 
    socket.on('connection', function (data) { 
     socket.emit('get notifications', {user_id: SessionService.currentUser._id}); 
    }); 

    socket.on('notification data', function(data){ 
     console.log("-- Not Data Test -"); 
     $scope.notificationCount = data.length; 
    }); 
} 

Codice e lato server -

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

    socket.emit('connection', "Connection Created."); 

    socket.on('send memo notification', function(data) { 
     notifications.createNotification(data); 
    }); 

    socket.on('get notifications', function(data){ 
    notifications.getNotifications(data, function(response){ 
     socket.emit('notification data', response.data); 
    }); 
    }); 

}); 

backend codice del controller -

exports.getNotifications = function(data, callback) { 
    var userId = data.user_id; 
    Notification.find({receiver_id: userId}, function(err, response){ 
     if (err) 
      callback({"message": "error", "data": err, "status_code": "500"}); 
     else 
      callback({"message": "success", "data": response, "status_code": "200"}); 
    }); 
}; 

exports.createNotification = function(data) { 
    var notificationData = data; 
    var x = 0; 
    for(var i=0; i< notificationData.length; i++) { 
     // Code 
     Notification(notificationData[i]).save(function(err,response){ 
      if (err) 
       return false; 
     });  
     if (x === notificationData.length - 1) { 
      return true; 
     } 
     x++; 
    } 
}; 

risposta

18

Se si desidera utilizzare i propri ID utente, non è possibile mappare l'ID socket con l'id utente. Presumo che un client conosca il suo id utente da qualche parte, quindi potrebbe inviare il suo id utente al server dopo la connessione.

client

socket.on('connection', function (data) { 
    socket.emit('setUserId', myUserId); 
}); 

Il server salva la presa per ogni utente id.

socket.on('setUserId', function (userId) { 
    users[userId]=socket; 
}); 

Se si dispone di tale mappatura nel server, è possibile inviare un messaggio solo a questo client utilizzando l'id utente.

socket.on('send notification', function (userId) { 
    users[userId].emit('notification', "important notification message"); 
}); 

Modifica: il salvataggio diretto della presa corrispondente è ancora migliore.

+1

Si prega di trovare i miei edit..I Non ricevo aggiornamento automatico su side..I client devono aggiornare il browser allora solo aggiornamento riflette – Trialcoder

+0

Fatemi sapere se qualcosa non è ancora chiaro – Trialcoder

3

Secondo quanto ho capito, è necessario inviare una notifica privata solo ad alcuni utenti. Per questo, salva il nome dell'utente a cui vuoi inviare e il socket corrispondente in diversi hash.

username [socket.name] = username to be added; 
usersocket [ socket.name ] =socket; 

Poi per emettere i messaggi solo a tale utente, utilizzare

usersocket[ socket.name ].emit('event for send message', ' what you want to send '); 
+0

Se volete, posso inviare il codice. –

+0

Si prega di trovare la mia modifica – Trialcoder

+0

Si può semplicemente inoltrare l'aggiornamento in modo che io possa cercarlo ?? –