2017-02-16 5 views
0

チャットサーバーが動作しない理由を理解できません。このエラーはgettin io.set();もう存在しませんが、私はその場所で何を使用しますか?キーがあることであるsocket.ioを使用してチャットサーバーを作成しているときにエラーが発生しました。

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

:これまで

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

:ここ

"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

変更を使用して、私のチャットサーバーのコードです新たに接続されたsocketハンドラが.on('connection', ...)ハンドラに渡され、新しく作成された接続と通信するために、そのハンドラを宣言して使用する必要があります。

+0

おかげさまで、私は別のエラーが発生したため、エラーを修正したと信じていました。以来、情報のおかげで、今度は次のスタックトレースに笑います。 –

+0

@ SamuelM.King - これが最初に投稿した問題については、答えの左側にある緑色のチェックマークをクリックすることでコミュニティにその旨を示すことができます。また、ここで適切な手順を実行するための評判ポイント(ここではさらに多くの特権が得られます)が得られます。必要があれば、次の問題を新しい質問として投稿することができます(次の問題について適切な詳細を記入してください)。 – jfriend00

+0

@ jfriend00-ありがとう。 –

関連する問題