powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / Серверный JavaScript (Node.js, Ringo, Nitro, Sling) [игнор отключен] [закрыт для гостей] / События на конкретный сокет не работают
2 сообщений из 2, страница 1 из 1
События на конкретный сокет не работают
    #38450734
nepster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Итак собственно пишу игру. Столкнулся вот с такой проблемой, не работают события которые я отправляю на конкретный сокет.

Мой клиент

Код: 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.
            // Подключаемся к серверу nodejs с socket.io
            var socket = io.connect('http://localhost:8888/checkers');
            
            
            socket.on('connect', function () {
                
                console.log('Успешно подключились к игровому серверу');

            });
                

            socket.on('reconnect', function () {
                
                console.log('Переподключились, продолжайте игру');
                
            });
            
            
            socket.on('reconnecting', function () {
                
                console.log('Соединение с сервером потеряно, переподключаемся...');
                
            });
            
            
            socket.on('error', function (e) {
                
                console.log('Ошибка: ' + (e ? e : 'неизвестная ошибка'));
                
            });
            
            ///////////////////////////////////////////////////////////////////
            
            // Ожидаем соперника
            socket.on('wait', function(){
                console.log('... Ожидаем соперника...');
            });
            
            // Соперник убежал
            socket.on('exit', function(){
                console.log('... Соперник покинул игру ...');
            });
            
            
            
            socket.on('ready', function(gameId, myColor, hit){
                
                console.log('Мой цвет: '+myColor);
                console.log('Кто ходит: '+hit);
                
            });




для примера будем работать с событием 'wait' . Тоесть когда заходит игрок и нет других игроков в очереди у него должна висеть таблица ожидание.

идем на сервер:

Код: 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.
var SSP = io.of('/checkers').on('connection', function(socket)  {
    
    console.log('%s: %s - connected', socket.id.toString(), socket.handshake.address.address);
    
    // почистить за собой 
    function closeRoom(gameId, player) {
        socket.leave(gameId);
        io.sockets.socket(player).leave(gameId);
    }
    

    /**
     * СТАРТ ИГРЫ 
     */
    game.start(socket.id.toString(), function(start, gameId, player2, hit){
        
        if(start) 
        {
            // Подключем к игре соперников в отдельную комнату
            socket.join(gameId);
            io.sockets.socket(player2).join(gameId);
            
            // нужно выдать игрокам информацию об игре:
            // palyer1 - играет белыми 
            // player2 - играет черными 
            // чей 1 ход
            socket.emit('ready', gameId, 'white', hit);
            io.sockets.socket(player2).emit('ready', gameId, 'black', hit);
        
            
        } 
        else 
        {
            // ожидает второго игрока
            io.sockets.socket(socket.id).emit('wait');
            console.log('Игрок: '+socket.id+' ждет соперника!');
        }
    });


    socket.on('disconnect', function () {
       // Если один из игроков отключился, посылаем об этом сообщение второму
        // Отключаем обоих от игры и удаляем её, освобождаем память
        game.end(socket.id.toString(), function(gameId, palyer) {
            io.sockets.socket(palyer).emit('exit');
            closeRoom(gameId, palyer);
        });
        console.log('%s: %s - disconnected', socket.id.toString(), socket.handshake.address.address);
    });

});





Обратите внимание на этот вот момент:

Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
           
        } 
        else 
        {
            // ожидает второго игрока
            io.sockets.socket(socket.id).emit('wait');
            console.log('Игрок: '+socket.id+' ждет соперника!');
        }




Когда пользователь 1, он сразу попадает вот сюда, тоесть в ожидание. Я проверял консольлогом срока ('Игрок: '+socket.id+' ждет соперника!') отлично работает. В этой ситуации, когда пользователю нужно подождать 2 игрока, нужно его направит ьна событие wait.

io.sockets.socket(socket.id).emit('wait'); - попросту не работает.

Так же само все события где я использую socket.id, не работают. Подскажите пожалуйста почему ?
...
Рейтинг: 0 / 0
События на конкретный сокет не работают
    #38451095
nepster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
проблема решена, вся суть в:

Код: javascript
1.
2.
3.
4.
5.
io.sockets.on('connection', function (socket) 
{
    
  
});
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Серверный JavaScript (Node.js, Ringo, Nitro, Sling) [игнор отключен] [закрыт для гостей] / События на конкретный сокет не работают
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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