【问题标题】:Luasocket irc check to receive messageLuasocket irc 检查接收消息
【发布时间】:2013-08-28 12:06:53
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: lua irc luasocket


    【解决方案1】:

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

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

    LuaSocket reference 包含完整的详细信息,但是您必须修改代码以处理“超时”故障状态,或者添加对 socket.select() 的调用以确保您只使用“可以使用了。

    【讨论】:

      猜你喜欢
      • 2018-02-27
      • 2014-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多