Commit 1032e9dd authored by Marcel Stör's avatar Marcel Stör
Browse files

Extract and hoist net receive callbacks

This is done to avoid the accidental upval binding
parent c54bc05b
...@@ -135,15 +135,21 @@ Listen on port from IP address. ...@@ -135,15 +135,21 @@ Listen on port from IP address.
#### Example #### Example
```lua ```lua
-- 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 -- server listens on 80, if data received, print data to console and send "hello world" back to caller
sv:listen(80, function(c) -- 30s time out for a inactive client
c:on("receive", function(c, pl) sv = net.createServer(net.TCP, 30)
print(pl)
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)
c:send("hello world") end
end)
``` ```
#### See also #### See also
...@@ -303,8 +309,8 @@ Multiple consecutive `send()` calls aren't guaranteed to work (and often don't) ...@@ -303,8 +309,8 @@ Multiple consecutive `send()` calls aren't guaranteed to work (and often don't)
#### Example #### Example
```lua ```lua
srv = net.createServer(net.TCP) srv = net.createServer(net.TCP)
srv:listen(80, function(conn)
conn:on("receive", function(sck, req) function receiver(sck, data)
local response = {} local response = {}
-- if you're sending back HTML over HTTP you'll want something like this instead -- if you're sending back HTML over HTTP you'll want something like this instead
...@@ -315,11 +321,11 @@ srv:listen(80, function(conn) ...@@ -315,11 +321,11 @@ srv:listen(80, function(conn)
response[#response + 1] = "e.g. content read from a file" response[#response + 1] = "e.g. content read from a file"
-- sends and removes the first element from the 'response' table -- sends and removes the first element from the 'response' table
local function send(sk) local function send(localSocket)
if #response > 0 if #response > 0
then sk:send(table.remove(response, 1)) then localSocket:send(table.remove(response, 1))
else else
sk:close() localSocket:close()
response = nil response = nil
end end
end end
...@@ -328,7 +334,10 @@ srv:listen(80, function(conn) ...@@ -328,7 +334,10 @@ srv:listen(80, function(conn)
sck:on("sent", send) sck:on("sent", send)
send(sck) send(sck)
end) end
srv:listen(80, function(conn)
conn:on("receive", receiver)
end) 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: 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:
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment