繁体   English   中英

Socket.io + node.js - 客户端未收到广播发射

[英]Socket.io + node.js - client not recieving broadcast emit

我正在尝试使用套接字 io 编写游戏,但我遇到了一些困难,如果您查看示例,当我发送 Freset(true) 时服务器接收它并尝试将重置变量发送到客户端,但是。 客户端没有收到服务器发送的消息。,在启动时它收到了消息,之后它没有

index.html(客户端)

<!doctype html>
<html>

<head>
    <title></title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        #playerOneBoard {
            background-color: rgb(202, 147, 147);
            width: 99%;
            height: 30%;
            display: inline-block;
        }

        #playerTwoBoard {
            background-color: rgb(146, 146, 223);
            width: 99%;
            height: 30%;
            display: inline-block;
        }

        .card {
            width: 200px;
            height: 350px;
            margin: 0 75px;
            border: black 5px solid;
        }

        .summon {
            transform: rotate(12deg);
        }

        .tap {
            transform: rotate(90deg);
        }
    </style>
</head>

<body>
    <div id="board">
        <div id="playerOneBoard"></div>
        <ul id="playerOneHand"></ul>
        <ul id="playerTwoBoard"></ul>
        <ul id="playerTwoHand"></ul>
    </div>
    <input id="u" type="radio" name="name" value="player one" checked>
    <input id="u" type="radio" name="name" value="Player two">
    <input id="submit1" type="button" value="synch">
    <script src="/socket.io/socket.io.js"></script>
    <script src="https://code.jquery.com/jquery-1.11.1.js"></script>
    <script>
        var playerOneLibrary = [];
        var playerOneHand = [];
        var playerOneBoard = [];
        var playerOneGraveyard = [];
        var playerOneExile = [];

        var playerTwoLibrary = [];
        var playerTwoHand = [];
        var playerTwoBoard = [];
        var playerTwoGraveyard = [];
        var playerTwoExile = [];

        //🔴🟢🔵⚫🟡⚪
        $(function() {
            var socket = io();

            socket.on('chat message', function(p1l, p2l, p1h, p2h, p1b, p2b, p1g, p2g, p1e, p2e) {
                playerOneLibrary = p1l;
                playerTwoLibrary = p2l;
                playerOneHand = p1h;
                playerTwoHand = p2h;
                playerOneBoard = p1b;
                playerTwoBoard = p2b;
                playerOneGraveyard = p1g;
                playerTwoGraveyard = p2g;
                playerOneExile = p1e;
                playerTwoExile = p2e;
                console.log('message recieved');
            });

            Freset = function(x) {
                socket.emit('reset game', x);
            }

            FdrawCard = function(obj) {
                var card = `
                <li id="${obj.cid}" class="card">
                    <h2>${obj.name}    <b> ${obj.mana}  </b> </h2>
                    <h3> ${obj.type} </h3>
                    <p> 
                        ${obj.text}
                        <i>${obj.power}/ ${obj.toughness}</i>
                    </p>
                    <div> buttons </div>
                </li> 
                `;
                return card;
            }

            Fdraw = function() {
                for (x in playerOneLibrary) {
                    $('#playerOneBoard').append(FdrawCard(playerOneLibrary[x]));
                }
                for (x in playerTwoLibrary) {
                    $('#playerTwoBoard').append(FdrawCard(playerTwoLibrary[x]));
                }
            }

        });
    </script>
</body>

</html>

index.js(服务器)

var app = require('express')();
var http = require('http').createServer(app);
var io = require('socket.io')(http);


//player one library
var playerOneDeck = [{
        "cid": "101",
        "name": "red lotus",
        "type": "land",
        "text": "this inherits the properties of the green lotus",
        "mana": "5 🔴",
        "power": "0",
        "toughness": "0",
    },
    {
        "cid": "102",
        "name": "white lotus",
        "type": "land",
        "text": "this does double the effect of the red lotus",
        "mana": "5 🟡",
        "power": "0",
        "toughness": "0",
    }
];
var playerOneLibrary = playerOneDeck;
var playerOneHand = [];
var playerOneBoard = [];
var playerOneGraveyard = [];
var playerOneExile = [];

var playerTwoDeck = [{
        "cid": "201",
        "name": "blue lotus",
        "type": "land",
        "text": "this does more than the white lotus",
        "mana": "5 🔵",
        "power": "0",
        "toughness": "0",
    },
    {
        "cid": "202",
        "name": "green lotus",
        "type": "land",
        "text": "this does nothing",
        "mana": "5 🟢",
        "power": "0",
        "toughness": "0",
    }
];
var playerTwoLibrary = playerTwoDeck;
var playerTwoHand = [];
var playerTwoBoard = [];
var playerTwoGraveyard = [];
var playerTwoExile = [];


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


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

    socket.emit('chat message',
        playerOneLibrary, playerTwoLibrary,
        playerOneHand, playerTwoHand,
        playerOneBoard, playerTwoBoard,
        playerOneGraveyard, playerTwoGraveyard,
        playerOneExile, playerTwoExile);

    socket.on('chat message', function(p1l, p2l, p1h, p2h, p1b, p2b, p1g, p2g, p1e, p2e) {

        playerOneLibrary = p1l;
        playerTwoLibrary = p2l;
        playerOneHand = p1h;
        playerTwoHand = p2h;
        playerOneBoard = p1b;
        playerTwoBoard = p2b;
        playerOneGraveyard = p1g;
        playerTwoGraveyard = p2g;
        playerOneExile = p1e;
        playerTwoExile = p2e;
        console.log('better not be a loop')
        socket.broadcast.emit('chat message',
            playerOneLibrary, playerTwoLibrary,
            playerOneHand, playerTwoHand,
            playerOneBoard, playerTwoBoard,
            playerOneGraveyard, playerTwoGraveyard,
            playerOneExile, playerTwoExile
        );

    });


    socket.on('reset game', function(x) {

        console.log(playerTwoLibrary);
        if (x == true) {

            playerOneLibrary = playerOneDeck;
            playerOneHand = [];
            playerOneBoard = [];
            playerOneGraveyard = [];
            playerOneExile = [];

            playerTwoLibrary = playerTwoDeck;
            playerTwoHand = [];
            playerTwoBoard = [];
            playerTwoGraveyard = [];
            playerTwoExile = [];
            console.log('game reset');

            socket.broadcast.emit('chat message',
                playerOneLibrary, playerTwoLibrary,
                playerOneHand, playerTwoHand,
                playerOneBoard, playerTwoBoard,
                playerOneGraveyard, playerTwoGraveyard,
                playerOneExile, playerTwoExile
            );

            console.log(playerTwoLibrary);
        } else { console.log('didnt reset') }
    });
});
http.listen(3000, function() {
    console.log('listening on *:3000');
});

我确定我错过了一些东西,希望你们能指出我的好方向

socket.broadcast.emit发送到每个连接的套接字(在与socket相同的命名空间中),除了socket 因此,它发送到所有 OTHER sockets,而不是socket代表的那个。 此处socket.broadcast的相关 socket.io 文档。

如果要发送到所有连接的 sockets,则使用:

io.emit(...)

或者,如果您只想发送到那个套接字,请使用:

socket.emit(...)

仅供参考,我发现这个“ emit cheatsheat ”包含您可以发送的所有不同方式非常有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM