2013-03-29 2 views
1

Я пытаюсь использовать luasocket для подключения к Irc-каналу и отправлять и получать сообщения в моей игре (Wolfenstein Enemy Territory, If that help).Luasocket irc check для получения сообщения

Сейчас я могу сделать все это с одной проблемой. Как только я установил его для прослушивания сообщения, он в основном блокируется. У меня есть команда fallback, если я набираю stoplisten в Irc, это просто останавливает скрипт, и я вижу, что у него есть все сообщение, но сама игра заблокирована во время ожидания сообщений.

Любые идеи о том, как я буду делать это без замораживания игры? Я недавно узнал немного сопрограмм. Поэтому я не знаю, правильно ли я их правильно использую. Я также должен отметить, что у меня есть доступ к функциям фрейма выполнения, который запускается каждые миллисекунды, если это помогает (хотя обычно это делается как: if math.mod (currentTime, 50) ~ = 0, а затем возвращает конец)

часть в моем коде: http://pastebin.com/j1gCqm4R (я не был собираюсь редактировать все мой код с отступом просто разместить его здесь, так что я просто положить его на Pastebin)

ответ

0

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

Решение неблокирование розетки. invoke :settimeout(0) на вашем объекте сокета клиента, и все будущие :send(...):recieve(...) немедленно вернутся, либо сработали, либо сработали.

LuaSocket reference содержит полную информацию, но вам нужно будет изменить свой код либо для обработки состояния сбоя «тайм-аут», либо для добавления вызовов в socket.select(), чтобы убедиться, что вы используете только готовые сокеты ' быть использованным.

 Смежные вопросы

  • Нет связанных вопросов^_^