«.send не является функцией», пытаясь сообщить игроку 1, что игрок 2 подключен.(NodeJS, веб-сокеты, JavaScript) - PullRequest
0 голосов
/ 17 декабря 2018

Итак, я пытался заставить это работать весь день.Я создаю простую веб-игру для 2 игроков с использованием JS и NodeJS, я хочу использовать веб-сокеты с этим проектом.

Я до сих пор позволил обоим игрокам подключиться к сокету, игрок один будет ждатьвторой игрок для подключения.

Когда игрок 2 подключается, клиенту Игрока 2 отправляется сообщение о том, что он может начать, в котором он отправляет сообщение обратно, в котором он говорит, что он начинает, следовательноthe message == "Started".

Затем, когда сообщение поступило от игрока 2 на сервер, я бы хотел, чтобы сервер отправил сообщение игроку 1, единственная проблема - это "игра".playerOne.send "не работает, в журнале написано, что это не функция.

Для ясности: поскольку game.addPlayer (con.id) был выполнен, game.playerOne содержит идентификатор подключения первого игрока.

Это код, о котором я говорю:

const wss = new websocket.Server({ server });
var websockets = {};

var game = new Game(gameStats.started++);
var connectionID = 0;

wss.on("connection", function(ws) {

    let con = ws;
    con.id = connectionID++;
    console.log(con.id + " has connected");
    let player = game.addPlayer(con.id);
    websockets[con.id] = game;

    console.log("Player %s placed in game %s", ws.id, game.id);

    if (game.twoConnected()) {
        setTimeout(function() {
            ws.send("Player 1 is ready!");
        }, 1000);
        game = new Game(gameStats.started++);
    }

    con.on("message", function incoming(message) {
        let game = websockets[con.id];

        let isPlayerOne = (game.playerOne === con);

        if (isPlayerOne) {

        } else {
            if (message == "Started") {
                game.playerOne.send(message);
            }
        }
    });
});

Мне бы очень хотелось узнать, как бы я отправил сообщение на другой веб-сокет (сокет Player 1) ипочему "гame.playerOne.send "не является допустимой функцией.

Заранее спасибо!

1 Ответ

0 голосов
/ 17 декабря 2018

Вы добавляете идентификаторы объектов веб-сокета в массив вашего плеера, а не сам веб-сокет.Поэтому вы вызываете 'send' для целого числа, а не объекта websocket.

Цитируется из моего комментария.


Я не смогчтобы проверить это, но я изменил строку с суффиксом // <--.Если это не то решение, к которому вы стремитесь, я предлагаю вам отредактировать ваш вопрос, чтобы он содержал функции, отвечающие за сохранение и извлечение игрока и всех игр, чтобы мы могли лучше рассмотреть, как и какие объекты хранятся.

В отношении sidenote я предлагаю использовать console.log ( docs ), например, на вашем game.playerOne.Таким образом, вы можете увидеть все свойства объекта в консоли отладки.

const wss = new websocket.Server({ server });
var websockets = {};

var game = new Game(gameStats.started++);
var connectionID = 0;

wss.on("connection", function(ws) {
    let con = ws;
    con.id = connectionID++;
    console.log(con.id + " has connected");
    let player = game.addPlayer(con); // <-- this
    websockets[con.id] = game;

    console.log("Player %s placed in game %s", ws.id, game.id);

    if (game.twoConnected()) {
        setTimeout(function() {
            ws.send("Player 1 is ready!");
        }, 1000);
        game = new Game(gameStats.started++);
    }

    con.on("message", function incoming(message) {
        let game = websockets[con.id];

        let isPlayerOne = (game.playerOne === con);

        if (isPlayerOne) {

        } else {
            if (message == "Started") {
                game.playerOne.send(message);
            }
        }
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...