All pastes #962102 Raw Edit

server

public text v1 · immutable
#962102 ·published 2008-03-29 14:12 UTC
rendered paste body
WebServer =
{
	_port = 50655,
}

function WebServer:run()
	socket = require("socket")
	self._server = socket.bind("localhost", self._port)
	self._server:settimeout(2)
	self._clients = {}
	self._sendClients = {}
	local ip,port = self._server:getsockname()
	print(ip..' running on port ' .. port)
	self:mainLoop()
end

function WebServer:lookForNewClients()
	local client = self._server:accept()
	if client then
		client:settimeout(2)
		table.insert(self._clients, client)
		print(client:receive())
		print('Got client')
	end
end

function WebServer:mainLoop()
	local clients = self._clients
 	while true do
 		self:lookForNewClients()

     	local receivingClients, _, error = socket.select(clients, nil, 3)
    	if error and error ~= "timeout" then
			print("error = "..tostring(error))
    	end

		for i,client in pairs(receivingClients) do
			if type(client) ~= "number" then
				print("receiving data")
				local data, error = client:receive('*a')
				if error then
					print("error: "..tostring(error).." on client "..tostring(client))
					client:send("error")
					table.remove(clients, i)
				else
					print("data received " .. data)
					--error, bytesSent = client:send(data)
					--print("data resent " .. data)
					--client:close()
					--table.remove(clients, i)
				end
			end
		end
 	end
end

WebServer:run()