Software /
code /
prosody
Diff
net/server_select.lua @ 3003:48871a549b4c
net.server_select, net.server_event: Add server.link() to link 2 connections with an intermediate buffer of the specified size
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Wed, 05 May 2010 15:25:48 +0100 |
parent | 3002:d1f864ed44c0 |
child | 3007:9d122a6ae674 |
child | 3008:23915803adbf |
line wrap: on
line diff
--- a/net/server_select.lua Wed May 05 15:24:24 2010 +0100 +++ b/net/server_select.lua Wed May 05 15:25:48 2010 +0100 @@ -675,6 +675,28 @@ --mem_free( ) end +local function link(sender, receiver, buffersize) + sender:set_mode(buffersize); + local sender_locked; + local _sendbuffer = receiver.sendbuffer; + function receiver.sendbuffer() + _sendbuffer(); + if sender_locked and receiver.bufferlen() < buffersize then + sender:lock_read(false); -- Unlock now + sender_locked = nil; + end + end + + local _readbuffer = sender.readbuffer; + function sender.readbuffer() + _readbuffer(); + if not sender_locked and receiver.bufferlen() >= buffersize then + sender_locked = true; + sender:lock_read(true); + end + end +end + ----------------------------------// PUBLIC //-- addserver = function( addr, port, listeners, pattern, sslctx ) -- this function provides a way for other scripts to reg a server @@ -898,6 +920,7 @@ wrapclient = wrapclient, loop = loop, + link = link, stats = stats, closeall = closeall, addtimer = addtimer,