cococococos 2 d-x 3.xパッケージのsocket方法

4717 ワード

Coco 2 d-x 3.2バージョンでは、Lual Socketを統合しています。プログラムの中で直接にluaSocketを呼び出して、便利なTCP/UDP/FTP/HTTPなどの通信ができます。とても便利です。
下のコードを先に書きます。
 
view source print01.local socket = require("socket")02.local host = "115.28.*.*"03.local port = 889004.local c = socket.tcp()05.--c:settimeout(5)06.local n,"font-family: Arial, Helvetica, sans-serif;">e"font-family: Arial, Helvetica, sans-serif;"> = c:connect(host, port)07.print("connect return:",n,e)-- n ,n 1 n nil 08.c:send("Hello")09.while  true   do10.local response, receive_status=c:receive()11.--print("receive return:",response or "nil"  ,receive_status or "nil")12.if  receive_status ~= "closed"  then13.if  response then14.print("receive:"..response)15.end16.else17.break18.end19.end20.endこのコードはTCPのリンクを して、サーバーのように「ハロー」を しました。そして、プロセスをブロックしてサーバメッセージを ちました。
 
ブロックというと、マルチプロセスに せざるを ません。そして、LUAではマルチスレッドを うとLUAの が に します。
ここでLuaual Socketはいい を しています。c:settimeout(0)
このような をすると、プログラムはブロックされず、scheduleでループして すればいいです。
の のプログラムの の を します。
 
view source print01.function socketInit()02.local socket = require("socket")03.local host = "115.28.*.*"04.local port = 889005.G_SOCKETTCP = socket.tcp()06.local n,e = G_SOCKETTCP:connect(host, port)07.print("connect return:",n,e)08.G_SOCKETTCP:settimeout(0)09.end10.function socketClose()11.G_SOCKETTCP:close()12.end13.function socketSend(sendStr)14.G_SOCKETTCP:send(sendStr)15.end16.function socketReceive()17.local response, receive_status=G_SOCKETTCP:receive()18.--print("receive return:",response or "nil"  ,receive_status or "nil")19.if  receive_status ~= "closed"  then20.if  response then21.print("Receive Message:"..response)22.-- 23.end24.else25.print("Service Closed!")26.end27.endその 、プログラムで び しを えばいいです。
view source print01.socketInit()02.local timePassed = 003.local function myHandler(dt)04.timePassed= timePassed + dt05.if  timePassed > 0.1  then06.socketReceive()07.timePassed= 008.end09.end10.self:scheduleUpdateWithPriorityLua(myHandler,1)11.--print(self.roomType)12.local jsonStr=getRoomInformationJson(self.roomType)13.print(jsonStr)14.socketSend(jsonStr)