47 lines
1.0 KiB
Python
47 lines
1.0 KiB
Python
|
from pygreen import greensock2
|
||
|
|
||
|
VERBOSE = True
|
||
|
|
||
|
|
||
|
if VERBOSE:
|
||
|
def log(msg, *args):
|
||
|
print '*', msg % args
|
||
|
else:
|
||
|
def log(msg, *args):
|
||
|
pass
|
||
|
|
||
|
class BufferedInput(object):
|
||
|
in_buf = ''
|
||
|
|
||
|
def recv(self, bufsize):
|
||
|
self.wait_input()
|
||
|
buf = self.in_buf[:bufsize]
|
||
|
self.in_buf = self.in_buf[bufsize:]
|
||
|
return buf
|
||
|
|
||
|
def recvall(self, bufsize):
|
||
|
result = []
|
||
|
while bufsize > 0:
|
||
|
buf = self.recv(bufsize)
|
||
|
result.append(buf)
|
||
|
bufsize -= len(buf)
|
||
|
return ''.join(result)
|
||
|
|
||
|
# ____________________________________________________________
|
||
|
|
||
|
def forwardpipe(s1, s2):
|
||
|
try:
|
||
|
while 1:
|
||
|
s2.wait_output()
|
||
|
buffer = s1.recv(32768)
|
||
|
log('[%r -> %r] %r', s1, s2, buffer)
|
||
|
s2.sendall(buffer)
|
||
|
del buffer
|
||
|
finally:
|
||
|
s2.shutdown_wr()
|
||
|
s1.shutdown_rd()
|
||
|
|
||
|
def linkpipes(s1, s2):
|
||
|
greensock2.autogreenlet(forwardpipe, s1, s2)
|
||
|
greensock2.autogreenlet(forwardpipe, s2, s1)
|