Page 4 of 34

Re: LUBE (Networking Library)

Posted: Thu Nov 13, 2008 8:32 pm
by rude
I will look into it next time (fist time) I need to use network functions. In particular when I start on Moonfreighter.

Thank you for using the MIT license.

Re: LUBE (Networking Library)

Posted: Fri Nov 14, 2008 11:22 am
by bartbes
  • Replaced old files by updated ones.
  • Starting documentation.
  • Finished first version, will be uploaded soon

Re: LUBE (Networking Library)

Posted: Tue Nov 18, 2008 9:49 pm
by mön
nice! i just tried and managed to connect and send some data :) and i'm confident that this will work much better the tcp server i tried to code some weeks ago. I'm gona use this for a school project which should be done in 10 days... i'll let you know how it worked out.

Re: LUBE (Networking Library)

Posted: Wed Nov 19, 2008 6:58 am
by bartbes
I'd like to tell you there is a line of code I forgot in the piece of code that includes the .sock file (both Client and Server)

Code: Select all

elseif love.filesystem.exists(socktype .. ".sock") then
			love.filesystem.require(socktype .. ".sock")
			self[socktype] = _G[socktype]
         *self.socktype = socktype
(I marked the line with a *)
I hope it works out, as I don't want to ruin your school project. ;)

Re: LUBE (Networking Library)

Posted: Mon Nov 24, 2008 5:01 pm
by mön
hmm, thanks

the servers send function confused me a bit today:

Code: Select all

function server.udp:send(data, rcpt)
	if rcpt then
		return self.socket:sendto(data, rcpt, Clients[rcpt])
	else
		for ip, port in pairs(Clients) do
			return self.socket:sendto(data, ip, port)
		end
	end
end
i expected send to send to every client in the Clients table if rcpt isnt defined, but it returns after it sending to the first client in the list... do you need to return at all?

Re: LUBE (Networking Library)

Posted: Mon Nov 24, 2008 10:23 pm
by Mr. Strange
I'm desperate to get my networked game up and running.

Unfortunately, I'm just not at all clear on how to use this to accomplish my goals. I'll lay out exactly what I want from my networking, and maybe you could be kind enough to tell me exactly how to accomplish it.

I have a card game, in which players move cards around a virtual table. There is a database of all of the cards, which each player has locally. Then there is a table which indicates which cards are currently on the table, and where they are located. The draw routine draws the table based upon this information. Every time a card is added, removed, or moved I generate a callback function. I want this function to (among other things) synchronize this table on remote machines running the same application.

I'm not really looking for security, or error-checking. I just want to play go-fish over a network. When I place a card on the virtual playmat, I want my opponent to have their playmat updated to reflect that, by keeping our lua tables synchronized.

Do I need to designate one player the server? How do I connect to my opponents? Is there a limit to the packet size I can send? (That is, will I need to limit the possible # of cards on the playmat?) How can I be relatively certain that our data is synchronized?

--Mr. Strange

Re: LUBE (Networking Library)

Posted: Tue Nov 25, 2008 1:18 pm
by bartbes
mön wrote:i expected send to send to every client in the Clients table if rcpt isnt defined, but it returns after it sending to the first client in the list... do you need to return at all?
oops... yeah my mistake.. I'll fix that soon


@Mr. Strange
You indeed have to use 1 player as the server (or use a dedicated server somewhere). The maximum package size is the same as that of LuaSocket, which is the same as the UDP standard (if using UDP): 8192 bytes, however you can use multiple packets to synchronize 1 time. To be certain that the data is synchronized, there are 2 methods:
-use TCP
-use "ACK"-packages, in the best case returning an acknowledgement code AND the number of bytes received

A basic implementation would be to send every change a player makes to the server from his/her client, and let the server distribute the new tables. In which case I'd let the server send an ID for one of the tables and send that table in one message, using another for the other table, and maybe another to indicate which player's turn it is.

At the moment I can't answer as good as I want, however, when I'm able to, I will. (yeah, I löve to make confusing sentences)

Re: LUBE (Networking Library)

Posted: Tue Nov 25, 2008 7:53 pm
by Mr. Strange
Although your response is clear enough, it doesn't really help me get off the ground. Before I can worry about packet size limitations, I need to actually send an receive a packet.

I really want an example program - something totally simple. For example:

When a player hits a key, display that letter in large type on the screen. When they hit a new key, replace the letter drawn. A second user at a second machine will also see the updated letters.

If someone could provide me with a script that does that, I believe I could start figuring things out from there. Any takers? Any working simple network apps I can peruse? I need a boot-strapping.

--Mr. Strange

Re: LUBE (Networking Library)

Posted: Tue Nov 25, 2008 9:13 pm
by mön
this might help....
it might also be completly wrong... but it's how i did my first test with lube...
the main.lua in a server.love

Code: Select all

love.filesystem.include("Server.lua")
function load()
  server:Init(1234)--creates an udp server and listens on port 1234
  server:setHandshake("testHS")--sets the handshake
  server:setCallback(reciveCB, connectCB, disconnectCB)--sets the callback functions
end
function update(dt)
  server:update()
end
function draw()
end
function reciveCB(data, ip, port)
  print("recived "..data.." from "..ip)
  server:send("i dont understnad "..data, ip)--sends the data back to where it came from
end
function connectCB(ip, port)
  print("a new client with ip: "..ip.." connected at port: "..port)
end
function disconnectCB(ip, port)
  print("client "..ip.." disconnected)
end
the main.lua in a client.love

Code: Select all

love.filesystem.include("Client.lua")

function load()
  client:Init()
  client:setCallback(networkCB)
  client:setHandshake("testHS")
--[[insert the ip of the machine where the server runs here! you can find the ip by opening a dosbox / commandline and typing ipconfic / ifconfig]]--
  client:connect("***.**.*.***", 1234)
end
function networkCB(data)
  print("the server sais: "..data)
end
function update(dt)
  client:update()
end
function keypressed(key)
  client:send("hello server, how are you today?")
end

Re: LUBE (Networking Library)

Posted: Tue Nov 25, 2008 10:44 pm
by Kuromeku
"server.lua line 106 attempt to call method receive a nil value".