-- Demo for Lua extension 'lqt'
-- This demo shows how to create a QTcpServer (via Lingo and LuaDirector xtra)
require 'qtcore'
require 'qtgui'
require 'qtnetwork'
local server = 0
local sockets = {}
local app = QApplication(0,{})
----------------------------------------
-- prints received data to message window
----------------------------------------
function printSocketData(n)
local socket = sockets[n]
while not socket:atEnd() do
data = socket:read(1024)
write(data)
end
end
----------------------------------------
-- Lua function accesible as global function in Lingo
----------------------------------------
on.startTcpServer = function(host, port)
if host==nil then host = '127.0.0.1' end
if port==nil then port = 12345 end
server = QTcpServer()
local ok = server:listen(QHostAddress(host), port)
if not ok then
write('\r> Error: Could not start TCP Server (host='..host..', port='..port..')\r')
return
end
-- slot called whenever a new TCP connection was made
server:connect('2newConnection()', function()
write('\r> Notice: new TCP connection\r')
local socket = server:nextPendingConnection()
-- show hello message to connected client
socket:write('Welcome to the LuaDirector QTcpServer\r\n')
local n = #sockets+1
local func = 'readyRead'..n..'()'
app:__addmethod(func, function()
printSocketData(n)
end)
socket:connect('2readyRead()', app, '1'..func)
-- add to table of open sockets
sockets[n] = socket
end)
write('\r> Notice: TCP Server started (host='..host..', port='..port..')\r')
end
----------------------------------------
-- Lua function accesible as global function in Lingo
----------------------------------------
on.stopTcpServer = function()
write('\r> Notice: TCP Server stopped\r')
-- close all open sockets
for _,v in ipairs(sockets) do v:close() end
sockets = {}
-- close the server
if server~=0 then
server:close()
server = 0
end
end