Я хочу, чтобы отправить сообщение в определенную комнату (все клиенты в комнате), я искал много и пытался эти варианты:Не удается отправить сообщение в конкретную комнату [socket.io]
io.in(socket.RoomId).emit('Test');
io.to(socket.RoomId).emit('Test');
io.sockets.in(socket.RoomId).emit('Test');
Я хотел для отправки в качестве сервера, поэтому без использования существующего сокета в комнате. Но так как я не мог найти способ, которым я попытался следующие:
this.ListOfSockets[0].to(RoomId).emit('Test');
Это работает не так, поэтому я попытался просто испускать к самому гнезду, как это:
this.ListOfSockets[0].emit('Test');
И это работает, как я ожидается.
Что я делаю неправильно? Почему я не могу отправить сервер для всех клиентов в определенной комнате?
Update 2: Добавление еще немного кода для литий X
io.on('connection', function(socket){
console.log('client connected');
playerCount++;
//For testing purposes I give player random generated string using: var shortid = require('shortid');
socket.id = shortid.generate();
console.log('id of this socket is:' + socket.id);
//When client decides to play the game and want's to join a random room
socket.on('JoinRoom', function()
{
//Checks if there exist an open room
if(OpenRoom.length > 0)
{
//Joins first room in openroom list
socket.join(OpenRoom[0].RID);
socket.RoomId = OpenRoom[0].RID;
//Joinedroom lets player open the next scene in my game
socket.emit('JoinedRoom');
//Joinedroom is a function that sends information to the socket about the room and the state of the game,
//adding the the player to room etc.
JoinedRoom(socket.id, OpenRoom[0].RID, socket);
}
else
{
//If there is no open room, it creates a new room with new id.
OpenRoom.push({ RID:shortid.generate(), TimeOutID: null });
//Joins room
socket.join(OpenRoom[OpenRoom.length - 1].RID);
socket.RoomId = OpenRoom[OpenRoom.length - 1].RID;
//Creates room and fills information to it
socket.emit('JoinedRoom');
var NewRoom = new Room(OpenRoom[OpenRoom.length - 1].RID)
NewRoom.addPlayer(socket.id);
NewRoom.addSocket(socket);
Rooms.push(NewRoom);
OpenRoom[OpenRoom.length - 1].TimeOutID = setTimeout(CloseRoom, 5000, OpenRoom[OpenRoom.length - 1]);
}
//Checking if RoomId exists, it exists.
console.log(socket.RoomId);
//When I send 'test' to client, the client should print 'Succesfully Tested' to the console
//For io.to I dont get the message 'Succesfully Tested'
io.to(socket.RoomId).emit('Test');
//With socket.emit I get 'Succesfully Tested' message inside my console at the client side.
socket.emit('Test');
});
Заранее спасибо
Если вы регистрируете 'OpenRoom [OpenRoom.length - 1] .RID', что происходит в каждой точке? –
'socket.join (OpenRoom [OpenRoom.length - 1] .RID);' Также не должно быть 'socket.join (OpenRoom [OpenRoom [0]]. RID);' Если вы не добавляете к нему? –
Да, после того, как вы упомянули об этом, я изменил его на 0. В партии я получаю на каждом этапе один и тот же идентификатор, чтобы он работал хорошо. Это может быть неправильно на стороне клиента? Это мой код на стороне клиента: socket.On («Тест», onTest); (это код C# для движка для единства) –