2013-05-06 2 views
0

Я создаю что-то с node.js и socket.io, которое позволяет пользователям писать в текстовом поле (в значительной степени похожим на tchat), но я нуждаюсь в них до поочередно пишут. Что-то вроде:Node.js w/Socket.io - функция пользователей пользователей (разрешить и предотвратить запись)

  • Пользователь 1 пишет. Пользователь 2 и Пользователь 3 не могут написать.
  • Пользователь 1 отправить сообщение.
  • Пользователь 1 не может написать. Пользователю 2 разрешено писать. Пользователь 3 не может написать.
  • Пользователь 2 отправить сообщение.
  • Пользователь 1 и Пользователь 2 не может написать. Пользователю 3 разрешено писать.
  • Пользователь 3 отправить сообщение.
  • Пользователь 1 пишет. Пользователь 2 и Пользователь 3 не могут написать.
  • ... и т.д.

На данный момент, у меня есть (на стороне клиента):

var ucan; 
    $('#txtform').submit(function(event){ 
     if(ucan){ 
     socket.emit('trigger', me); 
     ucan = false; 
     } 
     $('#txtArea').attr('readonly','true'); 
     } 
    }) 

на стороне сервера:

socket.on('trigger', function(user){ 
     u = user.id + 1; // switch to next user since users[] (further) 
         // stores all the users with their ids 
     if(u >= users.length){ 
     u = 0; // loop throug all users 
     } 
     io.sockets.socket(users[u]).emit('turn'); 
    }) 

, что делает меня на клиенте еще раз:

socket.on('turn', function(){ 
     ucan = true; 
     $('#txtArea').removeAttr('readonly'); 
    }) 

Проблемы в том, что когда они подключаются к приложению, у новых пользователей есть разрешение на запись, поэтому в первом раунде они все могут писать одновременно, а когда все они написали, разрешение не зацикливается, и никто не может писать.

Я подумал, что, возможно, что-то существует внутри node.js или socket.io, что позволяет мне делать это более просто (так, как я сделал, вероятно, не самый лучший) или что-то еще, но так как я новичок и я ничего не нашел в Интернете, я прошу вас о помощи.

Спасибо!

пс: пожалуйста, простите мой английский не мой первый язык :)

ответ

0

Имейте это только для чтения по умолчанию, то на стороне сервера, когда пользователь подключается, если они являются единственным сокет подключен, испускают «поворот ». Вероятно, вы также должны обращаться с тем случаем, когда лицо, чей ход отключается, в этот момент вы должны сделать свой триггер и позволить кому-то другому управлять.

+0

Спасибо за вашу быстроту! В настоящее время я работаю над вашим решением, я скажу вам, если это сработает. (Он не фиксирует проблему цикла через массив пользователей, но он дает мне новые способы мышления, поэтому я, возможно, найду это, работая над вашим ответом) – hugohil