2013-03-29 39 views
1

我正嘗試使用luasocket連接到Irc頻道,並在我的遊戲中發送和接收消息(如果有幫助,請參閱Wolfenstein Enemy Territory)。Luasocket irc檢查接收消息

現在我能夠做到所有這一切,只有一個問題。一旦我將它設置爲收聽消息,它基本上會鎖定。如果我在Irc中鍵入stoplisten,它會停止腳本,我有一個後備命令,而且我可以看到它收到了所有消息,但遊戲本身在等待消息時被鎖定。

有關我如何在不凍結遊戲的情況下做到這一點的任何想法?我最近剛剛學會了一些協程,所以我不知道我是否正確使用它們。 我還應該注意到,如果有幫助,我可以訪問運行每毫秒的運行幀函數(儘管通常它會這樣做:if math.mod(currentTime,50)〜= 0 then return end)

這裏是在我的代碼部分:http://pastebin.com/j1gCqm4R (我不是要修改我的代碼縮進只是它張貼在這裏,所以我只是把它放在引擎收錄)

回答

0

你的問題是,所有插座都在默認情況下,阻塞,這意味着他們會暫停('')當前的執行線程(在這種情況下,您的遊戲),直到他們得到所需的結果或'超時'。

解決方案是非阻塞套接字。在您的客戶端套接字對象上調用:settimeout(0),並且所有將來的:send(...):recieve(...)都將立即返回,並且成功或超時。

LuaSocket reference包含完整的細節,但您將不得不修改您的代碼以處理「超時」失敗狀態,或添加對socket.select()的調用以確保您只使用'準備就緒的套接字' 要使用的。