0

コードを生成してmongodb(My chrome browser)に保存する小さなアプリがあります。別のユーザー (私の Firefox ブラウザー) が指定されたコードを入力し、それをブロードキャストして、自分がそこにいることをクロムに知らせます。

今、私はクロムブラウザがそれ自体とFirefoxブラウザに合意を発行して、合意が発行された瞬間に両方が同じ関数によって解析されるようにしたいと考えています。

ただし、ポイントは、端末でコンソールログを1つしか取得できないため、Chrome(またはFirefox、私は疑わしい)だけがエミットをリッスンしていると思われることです。

両方のブラウザが「同意」を受信しない理由を誰でも見ることができますか?

私のapp.js:(オン接続部分)

io.sockets.on('connection', function (socket) {
    socket.on('code_game', function (data) {
        if (codeToUse == data.code) {
            //The receiving end received the proper code from the sending end
            console.log(data.secondUser + ' is verbonden via de code: ' + data.code);
            //Emit to all parties to let everyone know there's a connection
            socket.emit('agreement', { 
                userOne: {
                    name: 'Timen',
                    code: codeToUse
                },
                userTwo: {
                    name: data.secondUser,
                    code: data.code
                }
            });
        }
    });
});

そして、私のビューで呼び出されている JS ファイル: (この場合、sendToFirstUser は Firefox です)

var receivingUsersCode = false;
var receivingUsersName = false;
var socket = io.connect('http://localhost');

socket.on('agreement', function (data) {
    console.log("hooray");
});

function setReceivingData(code, username) {
    receivingUsersCode = code;
    receivingUsersName = username;
    ding = 'drie';
    $('#new_game').css('display', 'block');
    $('.theCode').html(receivingUsersCode);


}

function sendToFirstUser(code, username) {
    socket.emit('code_game', { code: code, secondUser: username});
}
4

1 に答える 1

0

あなたが求めていることを正確に理解しているかどうかはわかりません。しかし、Chrome と Firefox ブラウザの両方が「同意」イベントを発行しない理由を尋ねているように思えます。それだけなら、あなたは自分の質問に答えたと思います:

「別のユーザー (私の Firefox ブラウザー) が指定されたコードを入力し、それをブロードキャストして、彼がそこにいることを私のクロムに知らせます。」

//Starts broadcasting to other clients
io.sockets.on('connection', function (socket) {
    socket.broadcast.emit('code_game', { code: req.body.code, secondUser: req.body.secondUser});
});

Firefox ブラウザーは、socket.broadcast.emit を介して他のクライアント (Chrome ブラウザー) にのみ送信します。そのため、ブラウザー側で 'code_game' イベントを受け取るのは chrome ブラウザーだけです。しかし、ブラウザ側のコードでは、クライアントは「code_game」イベントを受け取ると「agreement」イベントを発行します。

socket.on('code_game', function (data) {
    if (receivingUsersCode == data.code) {
        console.log(data.secondUser + ' is is connected via code: ' + data.code);
        listenForMutualConnection();
        socket.emit('agreement', { 
            userOne: {
                name: receivingUsersName,
                code: receivingUsersCode
                },
            userTwo: {
                name: data.secondUser,
                code: data.code
            }
        });
    }
});

「code_game」イベントを受け取っているのは chrome ブラウザだけなので、「agreement」イベントを発行しているのはクロム ブラウザだけです。

于 2013-06-23T00:38:06.547 に答える