イベントを特定の部屋にブロードキャストすることはできません。room.broadcast.toはルーム内のどのクライアントからも受信されません
私は部屋にいるクライアントをチェックし、彼らは部屋に正しく参加しているようです。
しかしsocket.broadcast.to(socket.roomChannel).emit("cardSelected", cardInfo)
は単にsocket.broadcast.emit("cardSelected", cardInfo)
作品に対し
、動作しない(しかし、私は部屋にのみブロードキャストする必要があります)。
これは、ここに は私のコードです...非常識な私を運転している、機能していない部分が下にすべての方法である:
// Setup basic express server
var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
var port = '4000';
server.listen(port, function() {
});
this.rooms = [];
let lastRoomId = 0
let lastPlayerId = 0
io.on('connection', function (socket) {
// send list of rooms at connect
socket.emit("connected", {rooms: this.rooms});
socket.id = ++lastPlayerId;
// Room
socket.on('createRoom', (roomName) => {
const room = {
id: ++lastRoomId,
name: roomName,
players: [],
}
this.rooms.push(room);
socket.emit("roomCreated", room);
socket.broadcast.emit("update_rooms", {rooms: this.rooms});
});
socket.on('joinRoom', (id) => {
const index = this.rooms.map(room => room.id).indexOf(id);
if (index >= 0) {
this.rooms[index].players.push(socket.id);
socket.emit("roomJoined", this.rooms[index]);
socket.roomId = id;
socket.roomChannel = this.rooms[index].name;
socket.join(socket.roomChannel);
socket.broadcast.emit("update_rooms", {rooms: this.rooms});
}
});
// Game
socket.on('cardSelected', (cardInfo) => {
console.log("broadcasting to", socket.roomChannel);
console.log("socket room", socket.rooms);
var clients = io.sockets.adapter.rooms[socket.roomChannel].sockets;
// Shows that the clients ARE in the room
// returns "{ '1': true, '2': true }" if I have two clients
console.log(clients);
// DOESNT WORK!!
socket.broadcast.to(socket.roomChannel).emit("cardSelected", cardInfo)
// DOESNT WORK!!
io.to(socket.roomChannel).emit("cardSelected");
// Works
socket.broadcast.emit("cardSelected", cardInfo);
});
});
私も(放送なし)socket.to(socket.roomChannel).emit("cardSelected", cardInfo);
を試みたが、いずれかのなし
あなたはブロードキャストをしているのと同じ部屋に他のソケットを持っていますか? 'socket.roomChannel'に正しい値が入っていると確信していますか? – jfriend00
はい、私がコードで示したように、 'var clients = io.sockets.adapter.rooms [socket.roomChannel] .sockets; //クライアントが2人いる場合、クライアントが部屋にいることを示します // "{'1':true、 '2':true}」 console.log(clients); ' –
デバッガでこれを実行し、それが何をしているのかを確認しましたか?それは私がやることです。 – jfriend00