2013-04-16 54 views
0

它開始作爲一個lynda.com教程項目插座IO - 發射消息到各個插座

我已經試了又試,並試圖來得到這個工作。我希望能夠發送消息給特定的聊天成員(發送消息到一個套接字)。

我看着這個,我是仍然無法找到我的工作。 Socket.IO - how do I get a list of connected sockets/clients?

我已經儘可能多地剪掉了那不是這個問題的一部分。

第一個文件:

var io = require('socket.io'), connect = require('connect'), chatter = require('./chatter.js'); 

var app = connect().use(connect.static('public')).listen(process.env.PORT || 3000); 
var chatRoom = io.listen(app); 

chatter.setSockets(chatRoom.sockets); 

chatRoom.sockets.on("connection", function(socket){ 
chatter.connectChatter({ 
    socket: socket, 
    username: socket.id 
}); 
}); 

第二個文件:

 var allSockets = null; 
     var members = []; 

     exports.setSockets = function(sockets){ 
     allSockets = sockets; 
     } 

     exports.connectChatter = function(config){ 
     var exists = false; 
     var self; 
     for(var i = 0; i < members.length; i++){ 
      if(members[i].userName == config.username){ 
      exists = true; 
      break; 
      } 
     } 
     if(!exists){ 
      self = {userName:config.username}; 
      members.push(self); 
     } 

     config.socket.emit("welcome",{user:self}); 
     allSockets.emit("getUsers",{users:members}); 

     config.socket.on("chat", function(data){ 

    allSockets.emit("chat", {message:data.message}); //works just fine 
      sockets[socket].emit("chat", {message:data.message}); //WILL NOT WORK 
      sockets[0].emit("chat", {message:data.message}); //WILL NOT WORK 
      socket[0].emit("chat", {message:data.message}); //WILL NOT WORK 
      allSockets[socket].emit("chat", {message:data.message}); //WILL NOT WORK 
      allSockets[0].emit("chat", {message:data.message}); //WILL NOT WORK 

      allSockets.socket(0).emit('chat', {message:data.message}); //DOES NOTHING, BUT DOES NOT BREAK APP 

請幫助。我相信這是愚蠢的或愚蠢的。我對此很新。我只是不知道語法是什麼。

+0

當我做console.log,我得到套接字:[Circular]作爲它的一部分。 –

+0

console.log(allSockets.manager.sockets.manager.sockets.manager.sockets.manager.sockets);和console.log(allSockets.manager.sockets)是一樣的;這對我沒有任何意義。永無止境的循環 –

回答

0

好吧,它工作。不知道爲什麼Lynda.com使用這種編碼佈局,而其他人似乎只是做了io.sockets.socket樣式。

第一個文件:

var io = require('socket.io'), connect = require('connect'), chatter = require('./chatter.js'); 

var app = connect().use(connect.static('public')).listen(process.env.PORT || 3000); 
var chatRoom = io.listen(app); 

chatter.setSockets(chatRoom.sockets); 

chatRoom.sockets.on("connection", function(socket){ 
chatter.addSocket(socket); 
chatter.connectChatter({ 
    socket: socket, 
    username: socket.id 
}); 
}); 

第二個文件:

var socketList = []; 
exports.addSocket = function(s){ 
socketList.push(s); 
} 

var allSockets = null; 
     var members = []; 

     exports.setSockets = function(sockets){ 
     allSockets = sockets; 
     } 

     exports.connectChatter = function(config){ 
     var exists = false; 
     var self; 
     for(var i = 0; i < members.length; i++){ 
      if(members[i].userName == config.username){ 
      exists = true; 
      break; 
      } 
     } 
     if(!exists){ 
      self = {userName:config.username}; 
      members.push(self); 
     } 

     config.socket.emit("welcome",{user:self}); 
     allSockets.emit("getUsers",{users:members}); 

     config.socket.on("chat", function(data){ 
     socketList[0].emit("chat", {message:data.message}); 
} 

希望這可以幫助別人的未來。

+0

爲了防萬一有人在想,這不是全部的代碼。這只是讓socketList [0] .emit函數在不破壞應用程序的情況下工作所需的代碼 –