diff options
author | Matthew Wild <mwild1@gmail.com> | 2010-05-05 15:25:48 +0100 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2010-05-05 15:25:48 +0100 |
commit | a22e2228658189c68d1125f1fb6623088f8bc3cb (patch) | |
tree | 9e0f3456c0aacc4ea87eb5d27e29163325f0ba3c /net/server_event.lua | |
parent | 3c7eb58b08e7f416d73f86061706674d37f83c4f (diff) | |
download | prosody-a22e2228658189c68d1125f1fb6623088f8bc3cb.tar.gz prosody-a22e2228658189c68d1125f1fb6623088f8bc3cb.zip |
net.server_select, net.server_event: Add server.link() to link 2 connections with an intermediate buffer of the specified size
Diffstat (limited to 'net/server_event.lua')
-rw-r--r-- | net/server_event.lua | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/net/server_event.lua b/net/server_event.lua index 8eaa96da..43e70a0f 100644 --- a/net/server_event.lua +++ b/net/server_event.lua @@ -845,11 +845,32 @@ function hook_signal(signal_num, handler) return signal_events[signal_num]; end +local function link(sender, receiver, buffersize) + sender:set_mode(buffersize); + local sender_locked; + + function receiver:ondrain() + if sender_locked then + sender:resume(); + sender_locked = nil; + end + end + + function sender:onincoming(data) + receiver:write(data); + if receiver.writebufferlen >= buffersize then + sender_locked = true; + sender:pause(); + end + end +end + return { cfg = cfg, base = base, loop = loop, + link = link, event = event, event_base = base, addevent = newevent, |