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.
LUBE (Networking Library)
- bartbes
- Sex machine
- Posts: 4946
- Joined: Fri Aug 29, 2008 10:35 am
- Location: The Netherlands
- Contact:
Re: LUBE (Networking Library)
- Replaced old files by updated ones.
- Starting documentation.
- Finished first version, will be uploaded soon
Re: LUBE (Networking Library)
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.
- bartbes
- Sex machine
- Posts: 4946
- Joined: Fri Aug 29, 2008 10:35 am
- Location: The Netherlands
- Contact:
Re: LUBE (Networking Library)
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)
(I marked the line with a *)
I hope it works out, as I don't want to ruin your school project.
Code: Select all
elseif love.filesystem.exists(socktype .. ".sock") then
love.filesystem.require(socktype .. ".sock")
self[socktype] = _G[socktype]
*self.socktype = socktype
I hope it works out, as I don't want to ruin your school project.
Re: LUBE (Networking Library)
hmm, thanks
the servers send function confused me a bit today:
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?
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
-
- Party member
- Posts: 101
- Joined: Mon Aug 11, 2008 5:19 am
Re: LUBE (Networking Library)
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
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
- bartbes
- Sex machine
- Posts: 4946
- Joined: Fri Aug 29, 2008 10:35 am
- Location: The Netherlands
- Contact:
Re: LUBE (Networking Library)
oops... yeah my mistake.. I'll fix that soonmö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?
@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)
-
- Party member
- Posts: 101
- Joined: Mon Aug 11, 2008 5:19 am
Re: LUBE (Networking Library)
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
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)
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
the main.lua in a client.love
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
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)
"server.lua line 106 attempt to call method receive a nil value".
Who is online
Users browsing this forum: No registered users and 2 guests