Extract and hoist net receive callbacks

This is done to avoid the accidental upval binding
This commit is contained in:
Marcel Stör 2016-11-27 21:42:10 +01:00
parent c54bc05ba6
commit 1032e9dd90
1 changed files with 38 additions and 29 deletions

View File

@ -135,15 +135,21 @@ Listen on port from IP address.
#### Example
```lua
-- server listens on 80, if data received, print data to console and send "hello world" back to caller
-- 30s time out for a inactive client
sv = net.createServer(net.TCP, 30)
-- server listens on 80, if data received, print data to console and send "hello world" back to caller
sv:listen(80, function(c)
c:on("receive", function(c, pl)
print(pl)
end)
c:send("hello world")
function receiver(sck, data)
print(data)
sck:close()
end
if sv then
sv:listen(80, function(conn)
conn:on("receive", receiver)
conn:send("hello world")
end)
end
```
#### See also
@ -303,8 +309,8 @@ Multiple consecutive `send()` calls aren't guaranteed to work (and often don't)
#### Example
```lua
srv = net.createServer(net.TCP)
srv:listen(80, function(conn)
conn:on("receive", function(sck, req)
function receiver(sck, data)
local response = {}
-- if you're sending back HTML over HTTP you'll want something like this instead
@ -315,11 +321,11 @@ srv:listen(80, function(conn)
response[#response + 1] = "e.g. content read from a file"
-- sends and removes the first element from the 'response' table
local function send(sk)
local function send(localSocket)
if #response > 0
then sk:send(table.remove(response, 1))
then localSocket:send(table.remove(response, 1))
else
sk:close()
localSocket:close()
response = nil
end
end
@ -328,7 +334,10 @@ srv:listen(80, function(conn)
sck:on("sent", send)
send(sck)
end)
end
srv:listen(80, function(conn)
conn:on("receive", receiver)
end)
```
If you do not or can not keep all the data you send back in memory at one time (remember that `response` is an aggregation) you may use explicit callbacks instead of building up a table like so: