2013-10-03 8 views
15

क्या मैं आपकी मदद के लिए पूछ सकता हूं। मेरे कोड socket.room का उपयोग करके कमरे बनाने के लिए काम नहीं करते हैं, पहले मैंने var rooms = ['Lobby']; घोषित कर दिया है और मैं कमरे बनाना और बनाए गए कमरे के नाम rooms[] पर धक्का देना चाहता हूं। मेरा लक्ष्य उपयोगकर्ताओं को अपना कमरा बनाने और यदि संभव हो तो इसे हटाने की अनुमति देना है। मैंने संदर्भ के रूप में माइकल मुखिन here के कोड का उपयोग किया।नोड.जेएस और सॉकेट.ओओ कक्ष बनाना

यहाँ मेरी server.js का कोड है

var redis = require('redis'); 
var express = require('express'); 
var app = express(); 
var http = require('http'); 
var server = http.createServer(app); 
var io = require('socket.io').listen(server); 
var publish = redis.createClient(); 
var subscribe = redis.createClient(); 

server.listen(8080); 


app.get('/', function (req, res) { 
    res.sendfile(__dirname + '/index.html'); 
}); 

var usernames = {}; 

var rooms = ['Lobby']; 

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

    socket.on('adduser', function (username){ 
     socket.username = username; 
     socket.room = 'Lobby';   
     usernames[username] = username; 
     socket.join('Lobby');   
     subscribe.subscribe(socket.room); 
     socket.emit('updatechat', 'SERVER', 'you have connected to Lobby'); 
     socket.broadcast.to('Lobby').emit('updatechat', 'SERVER', username + ' has connected to this room'); 
     socket.emit('updaterooms', rooms, 'Lobby'); 
    }); 

    socket.on('create', function (room) { 
     var room = 'test'; 
     rooms.push(room); 
     }); 

    socket.on('sendchat', function (data) { 

     io.sockets.in(socket.room).emit('updatechat', socket.username, data); 
     if (socket.room === 'Lobby') { 
      publish.publish('Lobby', data); 
     } else { 
     publish.publish(socket.room, data); 
     } 
    }); 

    socket.on('switchRoom', function(newroom){ 
     socket.leave(socket.room); 
     socket.join(newroom); 
     subscribe.subscribe(newroom); 
     socket.emit('updatechat', 'SERVER', 'you have connected to '+ newroom); 
     socket.broadcast.to(socket.room).emit('updatechat', 'SERVER', socket.username+' has left this room'); 
     socket.room = newroom; 
     socket.broadcast.to(newroom).emit('updatechat', 'SERVER', socket.username+' has joined this room'); 
     socket.emit('updaterooms', rooms, newroom); 
    }); 



    socket.on('disconnect', function(){ 

     delete usernames[socket.username]; 
     io.sockets.emit('updateusers', usernames); 
     socket.broadcast.emit('updatechat', 'SERVER', socket.username + ' has disconnected'); 
     socket.leave(socket.room); 
    }); 
}); 

यहाँ क्लाइंट में कोड है index.html मैं एक कमरे बना सकते हैं और rooms[] की सूची में जोड़ने के लिए करना चाहते हैं ।

<script src="/socket.io/socket.io.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script> 
<script> 
    var socket = io.connect('http://localhost:8080'); 


    socket.on('connect', function(){ 

     socket.emit('adduser', prompt("What's your name: ")); 
     test(); 
    }); 


     //this is my create room to be called when i click a button 
     socket.on('createroom', function() { 
      socket.emit('create', room); 
     }); 




    socket.on('updatechat', function (username, data) { 
     $('#conversation').append('<b>'+ username + ':</b> ' + data + '<br>'); 
    }); 


    socket.on('updaterooms', function (rooms, current_room) { 
     $('#rooms').empty(); 
     $.each(rooms, function(key, value) { 
      if(value == current_room){ 
       $('#rooms').append('<div>' + value + '</div>'); 
      } 
      else { 
       $('#rooms').append('<div><a href="#" onclick="switchRoom(\''+value+'\')">' + value + '</a></div>'); 
      } 
     }); 
    }); 

    function switchRoom(room){ 
     socket.emit('switchRoom', room); 
    } 


    $(function(){ 
     $('#datasend').click(function() { 
      var message = $('#data').val(); 
      $('#data').val(''); 
      socket.emit('sendchat', message); 
     }); 


     $('#data').keypress(function(e) { 
      if(e.which == 13) { 
       $(this).blur(); 
       $('#datasend').focus().click(); 
      } 
     }); 
    }); 

</script> 
<div style="float:left;width:100px;border-right:1px solid black;height:300px;padding:10px;overflow:scroll-y;"> 
    <b>ROOMS</b> 
    <div id="rooms"></div> 
</div> 

<div style="float:left;width:300px;height:250px;overflow:scroll-y;padding:10px;"> 
    <div id="conversation"></div> 
    <input id="data" style="width:200px;" /> 
    <input type="button" id="datasend" value="send" /> 
</div> 

कृपया मेरी मदद करें दोस्तों मैंने पहले से ही socket.io दस्तावेज पढ़ लिया है। लेकिन मुझे समझना मुश्किल हो गया। मुझे आशा है कि आप मेरी मदद कर सकते हैं। अग्रिम धन्यवाद, मुझे खेद है, लेकिन मैं अभी भी socket.io और node.js. सीख रहा हूँ धन्यवाद।

+0

कहाँ बटन आप के लिए कोड है नया कमरा बनाने के लिए क्लिक करें? इसके अलावा, 'socket.on (' createroom ', ...);' मेरे लिए अजीब लगता है, क्योंकि अलग-अलग पक्ष आप कभी भी 'createroom' उत्सर्जित नहीं करते हैं। – warchimede

+0

मुझे socket.io को समझने में कठिनाई हो रही है, मुझे सर को किस लाइन को ठीक करना चाहिए? –

+0

कृपया मेरा उत्तर देखें :) – warchimede

उत्तर

32

यह आपकी मदद कर सकते हैं:

server.js (redis के बारे में कोड के बिना)

var usernames = {}; 

var rooms = ['Lobby']; 

io.sockets.on('connection', function(socket) { 
    socket.on('adduser', function(username) { 
     socket.username = username; 
     socket.room = 'Lobby'; 
     usernames[username] = username; 
     socket.join('Lobby'); 
     socket.emit('updatechat', 'SERVER', 'you have connected to Lobby'); 
     socket.broadcast.to('Lobby').emit('updatechat', 'SERVER', username + ' has connected to this room'); 
     socket.emit('updaterooms', rooms, 'Lobby'); 
    }); 

    socket.on('create', function(room) { 
     rooms.push(room); 
     socket.emit('updaterooms', rooms, socket.room); 
    }); 

    socket.on('sendchat', function(data) { 
     io.sockets["in"](socket.room).emit('updatechat', socket.username, data); 
    }); 

    socket.on('switchRoom', function(newroom) { 
     var oldroom; 
     oldroom = socket.room; 
     socket.leave(socket.room); 
     socket.join(newroom); 
     socket.emit('updatechat', 'SERVER', 'you have connected to ' + newroom); 
     socket.broadcast.to(oldroom).emit('updatechat', 'SERVER', socket.username + ' has left this room'); 
     socket.room = newroom; 
     socket.broadcast.to(newroom).emit('updatechat', 'SERVER', socket.username + ' has joined this room'); 
     socket.emit('updaterooms', rooms, newroom); 
    }); 

    socket.on('disconnect', function() { 
     delete usernames[socket.username]; 
     io.sockets.emit('updateusers', usernames); 
     socket.broadcast.emit('updatechat', 'SERVER', socket.username + ' has disconnected'); 
     socket.leave(socket.room); 
    }); 
}); 

index.html

<head> 
... // your other code 
<script> 
var socket = io.connect('http://localhost:8000'); 

socket.on('connect', function(){ 
    socket.emit('adduser', prompt("What's your name: ")); 
}); 

socket.on('updatechat', function (username, data) { 
    $('#conversation').append('<b>'+ username + ':</b> ' + data + '<br>'); 
}); 


socket.on('updaterooms', function (rooms, current_room) { 
    $('#rooms').empty(); 
    $.each(rooms, function(key, value) { 
     if(value == current_room){ 
      $('#rooms').append('<div>' + value + '</div>'); 
     } 
     else { 
      $('#rooms').append('<div><a href="#" onclick="switchRoom(\''+value+'\')">' + value + '</a></div>'); 
     } 
    }); 
}); 

function switchRoom(room){ 
    socket.emit('switchRoom', room); 
} 

$(function(){ 
    $('#datasend').click(function() { 
     var message = $('#data').val(); 
     $('#data').val(''); 
     socket.emit('sendchat', message); 
    }); 

    $('#data').keypress(function(e) { 
     if(e.which == 13) { 
      $(this).blur(); 
      $('#datasend').focus().click(); 
     } 
    }); 

    $('#roombutton').click(function(){ 
     var name = $('#roomname').val(); 
     $('#roomname').val(''); 
     socket.emit('create', name) 
    }); 
}); 

</script> 
</head> 
<body> 
    <div style="float:left;width:100px;border-right:1px solid black;height:300px;padding:10px;overflow:scroll-y;"> 
     <b>ROOMS</b> 
     <div id="rooms"></div> 
    </div> 

    <div style="float:left;width:300px;height:250px;overflow:scroll-y;padding:10px;"> 
     <div id="conversation"></div> 
     <input id="data" style="width:200px;" /> 
     <input type="button" id="datasend" value="send" /> 
    </div> 

    <div style="float:left;width:300px;height:250px;overflow:scroll-y;padding:10px;"> 
     <div id="room creation"></div> 
     <input id="roomname" style="width:200px;" /> 
     <input type="button" id="roombutton" value="create room" /> 
    </div> 
    ... // the rest of your page 
</body> 
+0

धन्यवाद sgwilly। मैं थोड़ी देर पहले stackoverflow जांचना भूल गया। मैंने आपके कोड की कोशिश की है लेकिन निर्माण कक्ष नहीं दिखाता है>। <मैं इसे फिर से जांचने की कोशिश करूंगा। धन्यवाद। –

+0

hi @sgwilly क्या आप कृपया मुझे यह समझने में मदद कर सकते हैं कि io.sockets.emit ('updusers', उपयोगकर्ता नाम) कैसे; socket.on में काम करता है ('डिस्कनेक्ट', फ़ंक्शन() {}); क्योंकि कोई io.sockets.on नहीं है ('अद्यतनकर्ता', फ़ंक्शन() {}); क्लाइंट कोड – Fadi

+0

में मुझे लगता है कि आप 'socket.broadcast.emit' को 'socket.on' ('create', function (room) {...} 'में जोड़ना चाहते हैं ताकि एक बार नए कमरे के अन्य ग्राहकों को सूचित किया जा सके बनाया गया है –

संबंधित मुद्दे