sock.lua - A simple networking library for LÖVE
Re: sock.lua - A simple networking library for LÖVE
A thread is "killed" when it returns; that should be enough.
lf = love.filesystem
ls = love.sound
la = love.audio
lp = love.physics
lt = love.thread
li = love.image
lg = love.graphics
ls = love.sound
la = love.audio
lp = love.physics
lt = love.thread
li = love.image
lg = love.graphics
Re: sock.lua - A simple networking library for LÖVE
You can destroy the server using this function: https://camchenry.com/sock.lua/#Server:destroy4aiman wrote: ↑Tue Jul 11, 2017 10:17 pmI'm using love.thread rather than coroutines.
Actually, there's no way to kill a server too - no server:stop() or any other equivalent.
Not sure nilling will do the job and underlying eNet will acknowledge the fact that the nilled server is no more.
So, now there're 2 things I need to be able to kill in reasonable time (of several minutes perhaps?)
Re: sock.lua - A simple networking library for LÖVE
Except when an error occurs in a thread. Then it (a thread) seems to not exit at all. I can do thread:getError() as many times as I want till the rest of the lifespan of the main app that has created that thread in the first place.
Wow! How could I possibly overlook that? Thanks a lot! At least now I can make thread stop via sock's server message.Ikroth wrote: ↑Tue Jul 11, 2017 10:40 pm You can destroy the server using this function: https://camchenry.com/sock.lua/#Server:destroy
It feels wrong to continue to discuss my threads-related problems here. I've made a different thread here. Please, visit it if you want to help ^_^
Re: sock.lua - A simple networking library for LÖVE
Is there a way to know the progress of data transmitting?
Say, I'm sending a file of 10Mb.
I need to give some feedback to a client.
Currently it's just a flashing message "Getting updates", but how about a progress bar?
I'm sending data like this:
I'm fine with sending messages from server like , but how is it possible to know the percentage?
Do I have to manually split that binary_data into pieces?
P.S. Sorry for double post, but this post has a different question
Say, I'm sending a file of 10Mb.
I need to give some feedback to a client.
Currently it's just a flashing message "Getting updates", but how about a progress bar?
I'm sending data like this:
Code: Select all
client:send("here's your data",binary_data)
Code: Select all
client:send("progress",percentage)
Do I have to manually split that binary_data into pieces?
P.S. Sorry for double post, but this post has a different question
Re: sock.lua - A simple networking library for LÖVE
I have some suggestions. Maybe a simpler way would be to just make a guess of how long it will take. You could perhaps calculate a guess based on ping and file size.
If you are sending percentage updates from the server, ensure that is sent over a different channel than the file data or the progress updates wouldn't get sent until after the file is done sending.
Perhaps you could even have the server store the average download time for that file and use that.
Or instead of sending that from the server, instead tell the client the file size in advance and it can calculate the guess.
I don't think there's any need for an exact measurement. Even if you split up the file into pieces and calculated the percent that way, it would fill up the progress bar inconsistently, since the internet is inconsistent. With the way I mentioned, it would increase the percent linearly at least, but it might have finished the file download before it is at 100% if it was an overestimate. Or it would hang at 100% momentarily if it was an underestimate.
If you are sending percentage updates from the server, ensure that is sent over a different channel than the file data or the progress updates wouldn't get sent until after the file is done sending.
Perhaps you could even have the server store the average download time for that file and use that.
Or instead of sending that from the server, instead tell the client the file size in advance and it can calculate the guess.
I don't think there's any need for an exact measurement. Even if you split up the file into pieces and calculated the percent that way, it would fill up the progress bar inconsistently, since the internet is inconsistent. With the way I mentioned, it would increase the percent linearly at least, but it might have finished the file download before it is at 100% if it was an overestimate. Or it would hang at 100% momentarily if it was an underestimate.
Re: sock.lua - A simple networking library for LÖVE
Uhmm...
I've studied undelying enet lib's articles on the wiki.
It seems threre's no way to send percentage updates, since I can't control how enet splits a huge 20Mb file into tiny packets. Sock counts packets, true, but it calls any message a packet - be it a number or a serialized bunary data of 20+Mb.
On the other hand, sending every file separately increases bandwith (needs measurment) and complexity of a client-server communication. I don't want the latter
But I like the idea of estimating.
There's setBandwidth method for a server, I think I can use that to calculate sending time server-side and give that to a client.
Is it worth determining max bandwidth of a hardware connection (presumably using some online service upon server startup) to make my estimates closer to real times, or I can get away with you-run-a-server-so-those-are-your-problems thinking?
Now's the only problem (since threads' behaviour got explained by a number of community members) is the time that server needs to launch yet another thread. Could use some profiling lib, probably.
Thanks, Nuthen224!
I've studied undelying enet lib's articles on the wiki.
It seems threre's no way to send percentage updates, since I can't control how enet splits a huge 20Mb file into tiny packets. Sock counts packets, true, but it calls any message a packet - be it a number or a serialized bunary data of 20+Mb.
On the other hand, sending every file separately increases bandwith (needs measurment) and complexity of a client-server communication. I don't want the latter
But I like the idea of estimating.
There's setBandwidth method for a server, I think I can use that to calculate sending time server-side and give that to a client.
Is it worth determining max bandwidth of a hardware connection (presumably using some online service upon server startup) to make my estimates closer to real times, or I can get away with you-run-a-server-so-those-are-your-problems thinking?
Now's the only problem (since threads' behaviour got explained by a number of community members) is the time that server needs to launch yet another thread. Could use some profiling lib, probably.
Thanks, Nuthen224!
- Sir_Silver
- Party member
- Posts: 286
- Joined: Mon Aug 22, 2016 2:25 pm
- Contact:
Re: sock.lua - A simple networking library for LÖVE
I'm trying to create a multiplayer game where a person can enter an ip and port to try to connect to a server, but if the ip is something that sock, or rather enet, doesn't like, for instance "192.", then it will crash with an error like "Unable to parse host name", or something like that. Is there a way to make it so that sock.lua won't throw this kind of an error if a bad ip is passed, or is the only solution here to try to make it so only viable ip can be passed?
- bartbes
- Sex machine
- Posts: 4946
- Joined: Fri Aug 29, 2008 10:35 am
- Location: The Netherlands
- Contact:
Re: sock.lua - A simple networking library for LÖVE
Can't you just use pcall?
- Sir_Silver
- Party member
- Posts: 286
- Joined: Mon Aug 22, 2016 2:25 pm
- Contact:
Re: sock.lua - A simple networking library for LÖVE
Yes I can. Thanks for the reminder that that is a thing!
-
- Citizen
- Posts: 73
- Joined: Wed Oct 28, 2015 11:18 pm
Re: sock.lua - A simple networking library for LÖVE
what am i doing wrong? I keep getting error during service and can;'t serialize message: serialize was not sent
simplified it and it still doesn't work..
Code: Select all
net = require "lib.sock"
local id = ""
local joined = false;
local server = net.newServer("localhost", 50301)
local client = net.newClient("localhost", 50302)
local messages = {}
local message = ""
function clientConnect(id)
clientSendMessage(id, "has connected")
joined = true
end
function clientSendMessage(id, message)
client:send("message", {id, message})
end
function serverGetMessage(id, message)
server:sendToAll("message", {id, message})
end
function clientGetMessage(id, message)
message = ""
table.insert(messages, message)
end
function love.load(dt)
server:on("message", serverGetMessage(id, message))
client:on("message", clientGetMessage(id, message))
client:connect()
end
function love.keypressed(key, scancode, isrepeat)
if joined == false then
if key == "return" then clientConnect(id)
elseif key == "space" then id = id .. " "
else id = id .. key
end
else
if key == "return" then clientSendMessage(id, message)
elseif key == "space" then message = message .. " "
else message = message .. key
end
end
end
function love.update()
server:update()
client:update()
end
function love.draw()
love.graphics.clear(0,0,0,1)
love.graphics.setColor(0.1,0.1,0.1,1)
love.graphics.rectangle("fill",0,480-16,640,480)
love.graphics.setColor(1,1,1,1)
if joined == false then love.graphics.print(id, 16,480-16,0,1,1,0,0)
elseif joined == true then love.graphics.print(message,16,480-16,0,1,1,0,0) end
for i,v in ipairs(messages) do love.graphics.print(v, 16,480-(i*16),0,1,1,0,0)
end
end
Code: Select all
net = require "lib.sock"
local str = ""
local server = net.newServer("localhost", 50301)
local client = net.newClient("localhost", 50302)
server:on("connect", function(message) server:sendToAll("connect", message) end)
client:on("connect", function(message) str = message end)
client:connect()
client:send("connect", "hello")
function love.update()
client:update()
server:update()
end
function love.draw()
love.graphics.print(str,320,240,0,1,1,0,0)
end
Who is online
Users browsing this forum: No registered users and 3 guests