0

ユーザーがサーバーに接続して離れるときに検出する基本的なチャットルームがあります。

ユーザーがサーバーに参加するときにユーザー名を入力するように求めたいのですが、どうすればよいですか?

コードは以下のとおりです。

索引.html

<html>
<head>
<script src="http://localhost:3000/socket.io/socket.io.js"></script>
<script type="text/javascript" charset="utf-8">
    var socket = io.connect('http://localhost:3000');

    socket.on('entrance', function  (data) {
        document.write('<p>' + data.message + '</p>');

        //STORE USERNAME of NEW SOCKET
        // on connection to server, ask for user's name with an anonymous callback
        socket.on('connect', function(){
        // call the server-side function 'adduser' and send one parameter (value of prompt)
        socket.emit('adduser', prompt("What's your name?"));
        });
    });

    socket.on('exit', function  (data) {
        document.write('<p>' + data.message + '</p>');
    });

    socket.on('chat', function  (data) {
        document.write('<p>' + data.message + '</p>');
    });
</script>
</head>
<body>

</body>
</html>

サーバー.js

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

var app = connect().use(connect.static('public')).listen(3000);
var game_room = io.listen(app);

game_room.sockets.on('connection', function (socket) {
    socket.emit('entrance', {message: 'Welcome to the chat room!'}); 
    socket.emit('entrance', {message: 'Your ID is #' + socket.id}); 

    socket.on('disconnect', function  () {
        game_room.sockets.emit('exit', {message: 'A chatter has disconnected.'});
    });

    socket.on('chat', function  (data) {
        game_room.socket.broadcast.emit('chat', {message: '# ' + data.message});
    });

    socket.broadcast.emit('entrance', {message: 'A new chatter is online.'});
});
4

2 に答える 2

0

これをサーバーコードに追加するだけです:

var users = [];

game_room.sockets.on('connection', function (socket) {
    socket.emit('entrance', {message: 'Welcome to the chat room!'}); 
    socket.emit('entrance', {message: 'Your ID is #' + socket.id}); 

    socket.on('adduser', function (name) {
       users.push(name);

       // attempt to clean up
       socket.once('disconnect', function () {
         var pos = users.indexOf(name);

         if (pos >= 0)
           users.splice(pos, 1);
       });
    });

    // ...
});

(2 人のユーザーが同じ名前を選択すると機能しません。)

于 2013-08-20T12:32:37.173 に答える