Не работает socket.broadcast.to(room)
#39139365
Ссылка:
Ссылка на сообщение:
Ссылка с названием темы:
|
|
|
Здравствуйте, товарищи!
Помогите, люди добрые, нет сил. Второй день туплю.
Разрабатываю мини игру на node.js+socket.io
Сначала всё работало (в говнокоде), начал менять структуру, чтоб было поприличнее - перестал работать broadcast.to
Т.е. не получается отправить сообщение всем в комнате, кроме отправителя.
Пробовал уже по-всякому.
Вот код:
server.js
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69.
var usernames = {};
var maxPlayers = 2;
var rooms = [];
io.sockets.on('connection', function(socket) {
socket.on('connectSuccess', function(id){
socket.id = id;
socket.room = false;
socket.active = false;
socket.name = false;
socket.onGame = false;
console.log("id "+socket.id+" connected");
socket.json.send({'event': 'welcome', 'text': 'Вы успешно подключились. Введите Ваше имя.'});
});
socket.on('register', function(name){
if (checkName(name))
{
socket.name = name;
usernames[name] = socket;
socket.onGame = true;
socket.json.send({'event': 'greeting', 'text': 'Добро пожаловать, ', 'name': name});
}
});
socket.on('searchRoom', function(name){
var gotRoom = false;
console.log("searching...");
for (var i=0; i<rooms.length; i++)
{
if ((rooms[i].cnt > 0) && (rooms[i].cnt < maxPlayers))
{
socket.join(i);
socket.room = i;
socket.active = false;
rooms[i].cnt += 1;
socket.json.send({'event': 'successJoin', 'text': 'Вы присоединились к игре. Игру создал: ', 'owner': rooms[i].owner, 'room': i});
console.log("room number "+i);
usernames[rooms[i].owner].json.emit('joinedToRoom', {'text': 'Игрок '+name+' присоединился к игре', 'room': i,'owner': rooms[i].owner});
socket.broadcast.to(socket.room).json.emit('joinedToRoom', {'text': 'Игрок '+name+' присоединился к игре', 'room': i,'owner': rooms[i].owner});
gotRoom = true;
break;
}
}
if (!gotRoom)
{
rooms.push(
{
owner: name,
cnt: 1,
askWord: false
}
);
socket.join(rooms.length-1);
socket.room = rooms.length-1;
socket.active = true;
socket.json.send({'event': 'createRoom', 'text': 'Вы создали игру. Ожидайте оппонента', 'room': socket.room, 'owner': rooms[i].owner});
}
console.log("rooms");
console.log(rooms);
});
socket.on('readyToStart', function(owner){
console.log(socket.room);
io.sockets.json.in(socket.room).send({'event': 'gameStarted', 'text': 'Игра начата. Первым ходит: ', 'owner': owner});
});
});
index.html
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78.
<script src="https://cdn.socket.io/socket.io-1.2.0.js"></script>
<script src="http://code.jquery.com/jquery-1.11.1.js"></script>
<script>
var socket = io();
socket.on('connect', function(){
id = Math.random()*9999;
socket.id = id;
socket.room = false;
socket.active = false;
socket.name = false;
socket.onGame = false;
socket.emit('connectSuccess', id);
console.log("id "+id+" send connect");
});
socket.on('joinedToRoom', function(msg){
$("#game-log").append($('<div class="system-mess">').text(msg.text));
});
socket.on('message', function(msg){
switch (msg.event)
{
case 'welcome':
$("#game-log").append($('<div class="system-mess">').text(msg.text));
$("#game-word-turn-send-form").submit(function() {
if (!socket.onGame)
{
var probName = $("#game-word-turn-text").val();
socket.emit('register', probName);
$("#game-word-turn-text").val("");
}
return false;
});
break;
case 'greeting':
socket.name = msg.name;
socket.onGame = true;
$("#game-log").append($('<div class="system-mess">').text(msg.text+msg.name));
socket.emit('searchRoom', msg.name);
$("#game-log").append($('<div class="system-mess">').text("Идёт поиск игры..."));
break;
case 'createRoom':
socket.room = msg.room;
$("#game-log").append($('<div class="system-mess">').text(msg.owner+", "+msg.text));
break;
case 'successJoin':
socket.room = msg.room;
$("#game-log").append($('<div class="system-mess">').text(msg.text+msg.owner));
break;
case 'joinedToRoom':
$("#game-log").append($('<div class="system-mess">').text(msg.text));
socket.emit('readyToStart', msg.owner);
break;
case 'gameStarted':
$("#game-log").append($('<div class="system-mess">').text(msg.text+msg.owner));
break;
default:
break;
}
});
</script>
</head>
<body>
<section class="game-wrap">
<h2 class="game-header">Игра</h2>
<div class="game-chat">
<div id="game-log" class="game-log"></div>
<div class="game-controls">
<form id="game-word-turn-send-form" action="">
<input type="text" class="game-word-turn" id="game-word-turn-text" pattern="^[A-Za-zА-Яа-яЁё\]+$"/>
<input type="submit" id="game-word-turn-send" class="game-word-send" value="Ход" />
</form>
</div>
</div>
</section>
</body>
Пробовал:
1.
socket.broadcast.to(socket.room).json.emit('joinedToRoom', {'text': 'Игрок '+name+' присоединился к игре', 'room': i,'owner': rooms[i].owner});
1.
socket.broadcast.to(i).json.emit('joinedToRoom', {'text': 'Игрок '+name+' присоединился к игре', 'room': i,'owner': rooms[i].owner});
1.
socket.broadcast.to(socket.room).json.send('joinedToRoom', {'text': 'Игрок '+name+' присоединился к игре', 'room': i,'owner': rooms[i].owner});
1.
socket.json.broadcast.to(socket.room).send('joinedToRoom', {'text': 'Игрок '+name+' присоединился к игре', 'room': i,'owner': rooms[i].owner});
1.
socket.json.broadcast.to(1).send('joinedToRoom', {'text': 'Игрок '+name+' присоединился к игре', 'room': i,'owner': rooms[i].owner});
Самое интересное, что это
1.
socket.json.broadcast.send('joinedToRoom', {'text': 'Игрок '+name+' присоединился к игре', 'room': i,'owner': rooms[i].owner});
и шлёт сообщения всем, включая отправителя.
Памагите, люди добрые, хто сколько может.
|
|