2017-02-16 2 views
0

Я не могу понять, почему мой чат-сервер не работает, gettin this error, Я читал, что io.set(); больше не существует, но что я использую на его месте?tyrning для создания чата с использованием socket.io, и я получаю сообщение об ошибке. Я не понимаю.

"C:\Program Files (x86)\JetBrains\WebStorm 2016.3.3\bin\runnerw.exe" "C:\Program Files\nodejs\node.exe" C:\Users\owner\WebstormProjects\appChat\server.js 
Server is running on port 3000... 
Option log level is not valid. Please refer to the README. 
C:\Users\owner\WebstormProjects\appChat\lib\chat_server.js:15 
     guestNumber = assignGuestName(socket, guestNumber, nickNames, namesUsed); 
            ^

ReferenceError: socket is not defined 
    at Namespace.<anonymous> (C:\Users\owner\WebstormProjects\appChat\lib\chat_server.js:15:39) 
    at emitOne (events.js:96:13) 
    at Namespace.emit (events.js:188:7) 
    at Namespace.emit (C:\Users\owner\WebstormProjects\appChat\node_modules\socket.io\lib\namespace.js:209:10) 
    at C:\Users\owner\WebstormProjects\appChat\node_modules\socket.io\lib\namespace.js:177:14 
    at _combinedTickCallback (internal/process/next_tick.js:67:7) 
    at process._tickCallback (internal/process/next_tick.js:98:9) 

Process finished with exit code 1 

Вот код для моего сервера чата с использованием Socket.io

var socketio = require('socket.io'); 
var io; 
var guestNumber = 1; 
var nickNames = {}; 
var namesUsed = []; 
var currentRoom = {}; 

// establishing connection logic 
exports.listen = function(server){ 
    io = socketio.listen(server); //Start Socket.IO server, allowing it to piggyback on existing HTTP server 
    io.set('log level', 1); 
    io.sockets.on('connection', function(){ //Define how each user connection will be handled 
     guestNumber = assignGuestName(socket, guestNumber, nickNames, namesUsed); //Assign a user a guest name when 
                        //they connect 
     JoinRoom(socket, 'Lobby');//Place user in lobby room when they connect 

     handleMessageBroadcasting(socket, nickNames); //Handle user messages 
     handleNameChangeAttempts(socket, nickNames, namesUsed);//name change attempts 
     handleRoomJoining(socket); //and room creation/changes 

     socket.on('rooms', function(){ //provide user with list of occupied rooms on request 
      socket.emit('rooms', io.sockets.manager.rooms); 
     }); 

     handleClientDisconnections(socket, nickNames, namesUsed); //Define clean up logic when user disconnects 
    }); 
}; 

//assigning a guest name 
function assignGuestName(socket, guestNumber, nickNames, namesUsed){ 
    var name = 'Guest' + guestNumber; //generate new guest name 
    nickNames[socket.id] = name; //associate guest name with client connection ID 
    socket.emit('nameResult', { //let user know there guest name 
     success: true, 
     name: name 

    }); 
    namesUsed.push(name); 
    return guestNumber + 1; //increment counter used to generate guest names 
} 

//Joining a room 
function JoinRoom(socket, room){ 
    socket.join(room); //make user join room 
    currentRoom[socket.id] = room; //note that user is now in this room 
    socket.emit('joinResult', {room: room}); //let user know they are now in new room 
    socket.broadcast.to(room).emit('message', { //let other users in room know that user has joined 
     text: nickNames[socket.id] + 'has joined ' + room + '.' 
    }); 

    var usersInRoom = io.sockets.clents(room); //Determine what other users are in same room as user 
    if(usersInRoom.length > 1){ //if other users exist, summarize who they are 
     var usersInRoomSummary = 'users Currently in ' + room + ':'; 
     for(var index in usersInRoom) { 
      var userSocketId = usersInRoom[index].id; 
      if (userSocketId != socket.id) { 
       if (index > 0) { 
        usersInRoomSummary += ', '; 
       } 
       usersInRoomSummary += nickNames[userSocket.id]; 
      } 
     } 
      usersInRoom += '.'; 
      socket.emit('message', {text: usersInRoomSummary}); //Send summary of other users in the room to the user 
    } 
} 

//logic to handle name-request attempts 
function handleNameChangeAttempts(socket, nickNames, namesUsed){ 
    socket.on('nameAttempt', function(name){ //Add listener for nameAttempt events 
     if(name.indexOf('Guest') == 0) { //Dont allow nicknames to begin withGuest 
      socket.emit('nameResult', { 
       success: false, 
       message: 'Names cannot begin with "Guest".' 
      }); 
     } else{ 
      if(namesUsed.indexOf(name) == -1) { //If name isn't already registered, register it. 
       var previousName = nickNames[socket.id]; 
       var previousNameIndex = namesUsed.indexOf(previousName); 
       namesUsed.push(name); 
       nickNames[socket.id] = name; 
       delete namesUsed[previousNameIndex]; //Remove previous name to make available to other clients 
       socket.emit('nameResult', { 
        success: true, 
        name: name 
       }); 
       socket.broadcast.to(currentRoom[socket.id]).emit('message', { 
        text: previousName + 'is now know as' + name + '.' 
       }); 
      }else{ 
       socket.emit('nameResult', { // Send error to client if name is already registered 
        success: false, 
        message: 'That name is already in use' 
       }); 
      } 
     } 
    }); 
} 

//send chat messages 
function handleMessageBroadcasting(socket){ 
    socket.on('message', function(message){ 
     socket.broadcast.to(message.room).emit('message', { 
      text: nickNames(socket.id) + ': ' + message.text 
     }); 
    }); 
} 

// creating rooms 
function handleRoomJoining(socket){ 
    socket.on('join', function(){ 
     var nameIndex = namesUsed.indexOf(nickNames[socket.id]); 
     delete namesUsed[nameIndex]; 
     delete nickNames[socket.id]; 
    }); 
} 

//handling user disconnections 
function handleClientDisconnections (socket) { 
    socket.on('disconnect', function() { 
     var nameIndex = namesUsed.indexOf(nickNames[socket.id]); 
     delete namesUsed[nameIndex]; 
     delete nickNames[socket.id]; 
    }); 
} 

ответ

2

Изменить это:

io.sockets.on('connection', function() {...}); 

к этому:

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

Ключ является то, что вновь подключенный socket i s передается в обработчик .on('connection', ...), и вы должны объявить и использовать его для связи с вновь созданным соединением.

+0

спасибо, что я считал, что исправил эту ошибку, потому что я получаю ошибку differrent, спасибо за информацию, поскольку ... теперь на следующую трассировку трассировки lol –

+0

@ SamuelM.King - Если это ответ на вопрос, который вы изначально разместили about, то вы можете указать это сообществу здесь, щелкнув зеленую галочку слева от ответа, и это также принесет вам некоторые очки репутации (что в конечном итоге приведет к большему количеству привилегий здесь) для правильной процедуры здесь. Если вам нужно, вы можете опубликовать свой следующий вопрос в качестве нового вопроса (с подробной информацией о следующем выпуске). – jfriend00

+0

@ jfriend00-thanks alot. –

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