All pastes #962528 Raw Edit

server lua

public lua v1 · immutable
#962528 ·published 2008-03-29 20:33 UTC
rendered paste body
Server ={	_host = "localhost",	_port = 8080,}Client = {	_host = "", -- Client IP and PORT will be assigned	_port = 0,}function Client:Run(data)	socket2 = require("socket")	self._client = assert(socket2.connect(self._host, self._port))	ip, port   = self._client:getpeername()	assert(ip, port)	print("Server Client connected to " .. ip .. " on " .. port)	Client:SendServerData(data)endfunction Client:SendServerData(data)	Server._sourceFile:seek("set")	if not data then		data = Server._sourceFile:read("*a")	end	Server._sourceFile:close()	assert(self._client:send("response"..data.."\n"))	print("Server data sent")	self._client:shutdown()	-- Data sent, close connectionendfunction Server:Run()	socket = require("socket")	md5 = require("md5")	self._server = assert(socket.bind(self._host, self._port,8))	ip, port   = self._server:getsockname()	assert(ip, port)	print(ip..' running on port ' .. port)	self:Listen()endfunction Server:Listen()	while true do		print("Looking for new clients")		self._client = assert(self._server:accept())		Client._host = self._client:getsockname()		print("Got client")		local line, error = self._client:receive()		while not error do			-- If client requests refresh, compare the md5s, and if they're different,			-- send the file to the client's server			local sstart,send = string.find(line,'request')			if sstart and send then				self._sourceFile = io.open("source.lua")				self._sourceFile:seek("set")				Client._port = string.sub(line,1,sstart-1)				local data = self._sourceFile:read("*a")				local clientmd5 = string.sub(line,send+1,-1)				local sourcemd5 = md5.sum(data)				if clientmd5 ~= sourcemd5 then					print("Client data differs from server data")					Client:Run()				else					print("Client data is up to date")					Client:Run("UPTODATE")				end			-- if the client requests close			elseif line == "close" then				self._client:close()				error = "Connection closed by client"			end			line, error = self._client:receive()		end		-- if error occurs, close connection with client		print(error)		self._client:close()	endendServer:Run()