Luasocket irc检查接收消息

时间:2013-03-29 22:14:08

标签: lua irc luasocket

我正在尝试使用luasocket连接到Irc频道,并在我的游戏中发送和接收消息(Wolfenstein Enemy Territory,如果有帮助的话)。

现在我能够完成所有这些,只有一个问题。一旦我将其设置为侦听消息,它基本上就会锁定。我有一个后备命令,如果我在Irc中键入stoplisten它只是停止脚本,我可以看到它得到了所有的消息,但游戏本身在等待消息时被锁定。

关于如何在不冻结游戏的情况下执行此操作的任何想法?我刚刚学到了一些协同程序所以我不知道我是否正确使用它们。 我还应该注意到我可以访问运行帧函数,如果有帮助的话,每毫秒运行一次(尽管通常它是这样的:如果math.mod(currentTime,50)〜= 0则返回结束)

以下是我的代码中的部分:http://pastebin.com/j1gCqm4R (我不会用缩进编辑我的所有代码只是为了在这里发布,所以我只是把它放在pastebin上)

1 个答案:

答案 0 :(得分:0)

你的问题是,默认情况下,所有套接字都是阻塞,这意味着它们将暂停('阻止')当前执行的线程(在这种情况下,你的游戏),直到他们得到所需的结果或'超时'。

解决方案是非阻塞套接字。在您的客户端套接字对象上调用:settimeout(0),将来所有:send(...) :recieve(...)将立即返回,或者已成功或超时。

LuaSocket reference包含完整的详细信息,但您必须修改代码以处理“超时”失败状态,或者添加对socket.select()的调用以确保您只使用套接字已经“准备好”使用了。