Extract and hoist net receive callbacks
This is done to avoid the accidental upval binding
This commit is contained in:
parent
c54bc05ba6
commit
1032e9dd90
|
@ -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:
|
||||
|
|
Loading…
Reference in New Issue