gpt4 book ai didi

sockets - Moai:通过套接字对命令使用react的图形

转载 作者:行者123 更新时间:2023-12-03 12:01:09 25 4
gpt4 key购买 nike

我需要一个程序,该程序可以根据我通过TCP发送给它的命令在屏幕上创建预定义的形状。
我正在尝试监听端口,以便可以使用它们。在等待命令之前(通过网络),我具有创建正方形所需的命令(我计划通过网络命令更改其属性)

问题在于它没有按原样创建任何图形或打开窗口。

require "socket"
require "mime"
require "ltn12"

host = "localhost"
port = "8080"
server, error = socket.bind(host, port)
if not server then print("server: " .. tostring(error)) os.exit() end


screen=MOAISim.openWindow ( "test", 640, 640 )

viewport = MOAIViewport.new (screen)
viewport:setSize ( 640, 640 )
viewport:setScale ( 640, 640 )

layer = MOAILayer2D.new ()
layer:setViewport ( viewport )
MOAISim.pushRenderPass ( layer )

function fillSquare (x,y,radius,red,green,blue)
a = red/255
b = green/255
c = blue/255
MOAIGfxDevice.setPenColor ( a, b, c) -- green
MOAIGfxDevice.setPenWidth ( 2 )
MOAIDraw.fillCircle ( x, y, radius, 4 ) -- x,y,r,steps
end
function onDraw ( )

fillSquare(0,64,64, 0,0,255)
end

scriptDeck = MOAIScriptDeck.new ()
scriptDeck:setRect ( -64, -64, 64, 64 )
scriptDeck:setDrawCallback ( onDraw)


prop = MOAIProp2D.new ()
prop:setDeck ( scriptDeck )
layer:insertProp ( prop )


while 1 do
print("server: waiting for client command...")
control = server:accept()
command, error = control:receive()
print(command,error)
error = control:send("hi from Moai\n")

end

它正在等待来自客户端的控制权= server:accept()的命令,但没有按应有的方式打开图形窗口。是否有任何命令强制其打开或呈现

谢谢

最佳答案

MOAI不会在单独的线程中运行脚本。阻止调用(server:accept)或永久循环(while true do)将阻止您的MOAI应用,当它永久地位于您的脚本中时,它似乎冻结。

因此,您必须做两件事:

  • 使用非阻塞调用。在这种情况下,您需要将服务器的超时设置为0。这会使server:accept立即返回。检查它的返回值以查看是否建立了连接。
  • 将while循环放入协程,并在每次迭代中产生一次。

  • 您需要以相同的方式处理客户,在协程循环中使用非阻塞调用。
    function clientProc(client)
    print('client connected:', client)

    client:settimeout(0) -- make client socket reads non-blocking

    while true do
    local command, err = client:receive('*l')
    if command then
    print('received command:', command)
    err = client:send("hi from Moai\n")
    elseif err == 'closed' then
    print('client disconnected:', client)
    break
    elseif err ~= 'timeout' then
    print('error: ', err)
    break
    end
    coroutine.yield()
    end
    client:close()
    end

    function serverProc()
    print("server: waiting for client connections...")

    server:settimeout(0) -- make server:accept call non-blocking

    while true do
    local client = server:accept()
    if client then
    MOAICoroutine.new():run(clientProc, client)
    end
    coroutine.yield()
    end
    end

    MOAICoroutine.new():run(serverProc)

    关于sockets - Moai:通过套接字对命令使用react的图形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11455771/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com