Гость
Форумы / Серверный JavaScript (Node.js, Ringo, Nitro, Sling) [игнор отключен] [закрыт для гостей] / События на конкретный сокет не работают / 2 сообщений из 2, страница 1 из 1
02.11.2013, 08:52
    #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
02.11.2013, 23:32
    #38451095
nepster
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
События на конкретный сокет не работают
проблема решена, вся суть в:

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


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