powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Серверный JavaScript (Node.js, Ringo, Nitro, Sling) [игнор отключен] [закрыт для гостей] / Не работает socket.broadcast.to(room)
2 сообщений из 2, страница 1 из 1
Не работает socket.broadcast.to(room)
    #39139365
genpictures
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, товарищи!
Помогите, люди добрые, нет сил. Второй день туплю.
Разрабатываю мини игру на node.js+socket.io
Сначала всё работало (в говнокоде), начал менять структуру, чтоб было поприличнее - перестал работать broadcast.to
Т.е. не получается отправить сообщение всем в комнате, кроме отправителя.
Пробовал уже по-всякому.

Вот код:

server.js
Код: javascript
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
Код: 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>	



Пробовал:
Код: javascript
1.
socket.broadcast.to(socket.room).json.emit('joinedToRoom', {'text': 'Игрок '+name+' присоединился к игре', 'room': i,'owner': rooms[i].owner});


Код: javascript
1.
socket.broadcast.to(i).json.emit('joinedToRoom', {'text': 'Игрок '+name+' присоединился к игре', 'room': i,'owner': rooms[i].owner});


Код: javascript
1.
socket.broadcast.to(socket.room).json.send('joinedToRoom', {'text': 'Игрок '+name+' присоединился к игре', 'room': i,'owner': rooms[i].owner});


Код: javascript
1.
socket.json.broadcast.to(socket.room).send('joinedToRoom', {'text': 'Игрок '+name+' присоединился к игре', 'room': i,'owner': rooms[i].owner});


Код: javascript
1.
socket.json.broadcast.to(1).send('joinedToRoom', {'text': 'Игрок '+name+' присоединился к игре', 'room': i,'owner': rooms[i].owner});



Самое интересное, что это
Код: javascript
1.
socket.json.broadcast.send('joinedToRoom', {'text': 'Игрок '+name+' присоединился к игре', 'room': i,'owner': rooms[i].owner});


и шлёт сообщения всем, включая отправителя.

Памагите, люди добрые, хто сколько может.
...
Рейтинг: 0 / 0
Не работает socket.broadcast.to(room)
    #39139374
genpictures
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь, я там не везде правильно синтаксис вставил, у emit и send он разный.
Но пробовал правильно.)
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Серверный JavaScript (Node.js, Ringo, Nitro, Sling) [игнор отключен] [закрыт для гостей] / Не работает socket.broadcast.to(room)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]