2016-11-11 14 views
0
let app = require('express')(), 
    http = require('http').Server(app), 
    User = require('../models/users'); 

http.listen(8080, function() { 
    console.log('Socket IO server has been started on port 8080'); 
}); 

let io = require('socket.io')(http); 
var socketRoom = {}; 

io.of('/chat').on('connection', function (socket) { 
    var ioRooms = io.of('/chat').adapter.rooms; 
    console.log(ioRooms) // I got length 1 when I print it. 
    socket.on('requestRandomChat', function (data) { 
     User.findOne({userToken : data.userToken}, function(err, user){ 
      if(err) socket.emit('db error'); 
      if(!user) socket.emit('db error : user not found'); 
      else { 
       socket.emit('responseUserProfile', user); 
       for (var key in rooms){ 
        if (key == ''){ 
         continue; 
        } 
        if (rooms[key].length == 1){ 
         var roomKey = key.replace('/', ''); 
         socket.join(roomKey); 
         io.sockets.in(roomKey).emit('completeMatch', {}); 
         socketRoom[socket.id] = roomKey; 
         return; 
        } 
       } 
       socket.join(user.userToken); 
       socketRoom[user.userToken] = socket.userToken; 
      } 
     }); 
    }); 

    socket.on('cancelRequest', function (data) { 
     socket.leave(socketRoom[socket.id]); 
     console.log(ioRooms); 
    }); 

    socket.on('sendMessage', function (data) { 
     console.log(ioRooms); 
     console.log('sendMessage!'); 
     io.of('/chat').in(socketRoom[socket.id]).emit('receiveMessage', data); 
    }); 

    socket.on('disconnect', function (data) { 
     console.log(ioRooms); 
     var key = socketRoom[socket.id]; 
     socket.leave(key); 
     io.of('/chat').in(key).emit('disconnect'); 
     var clients = io.of('/chat').clients(key); 
     for (var i = 0; i < clients.length; i++) { 
      clients[i].leave(key); 
     } 
    }); 
}); 

私は部屋の長さを取得しようとすると、socketIdで長さ1を取得します。 しかし、私は部屋には一度も接続していません。そのデフォルトルームですか?部屋のソケットで何が起こっているのか、誰かが説明できますか?長さが1の場合でもソケットに接続しませんでした

// { '/#2HAMaavywIwZ1B5fAAADチャット':部屋{ソケット:{ 'は/#2HAMaavywIwZ1B5fAAADチャット':真}、長さ:1}}各ソケットIOソケットに

答えて

0

が自動的にソケットIDで識別されるデフォルトルームに接続します。

あなたは長さ1

を取得し、なぜ私はあなたがそれが役に立つことを願っています。 http://socket.io/docs/rooms-and-namespaces/

関連する問題