向 Lance Game 中的个别玩家发送 "secret" 数据

Sending "secret" data to individual players in Lance Game

我想知道 lance-gg 中是否有一种简单的方法可以将玩家特定数据仅发送给每个玩家,而不是将所有数据发送给所有玩家。

我希望创建一个扑克游戏,并且不希望将每个玩家所持牌的数据广播给所有玩家,而是只让每个玩家收到有关他们自己牌的信息。

在当前的 GameEngine 和 ServerEngine 之间是否可以轻松实现?

在游戏过程中需要执行以下步骤:

玩家的卡片也需要存储在服务器上,而不是每一步都重新广播。

Lance 中有一个可用于客户端-服务器通信的低级网络层。

例如,如果服务器要向所有客户端发送带有数据 shakeData = { ... } 的事件 shakeItUp,游戏的 serverEngine 将调用:

this.io.sockets.emit('shakeItUp', shakeData);

要向特定玩家发送事件和数据,serverEngine class 可以做到

for (let socketId of Object.keys(this.connectedPlayers)) {
    let player = this.connectedPlayers[socketId];
    let playerId = player.socket.playerId;

    let message = `hello player ${playerId}`;
    this.connectedPlayers[socketId].socket.emit('secret', message);
}

客户端监听来自ClientEngine子class的消息,连接建立后:

// extend ClientEngine connect to add own events
connect() {
    return super.connect().then(() => {
        this.socket.on('secret', (e) => {
            console.log(`my secret: ${e}`);
        });
    });
}