70 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Python
		
	
	
	
| import os
 | |
| from py.__.net import greensock2
 | |
| 
 | |
| 
 | |
| class FDInput(object):
 | |
| 
 | |
|     def __init__(self, read_fd, close=True):
 | |
|         self.read_fd = read_fd
 | |
|         self._close = close     # a flag or a callback
 | |
| 
 | |
|     def shutdown_rd(self):
 | |
|         fd = self.read_fd
 | |
|         if fd is not None:
 | |
|             self.read_fd = None
 | |
|             close = self._close
 | |
|             if close:
 | |
|                 self._close = False
 | |
|                 if close == True:
 | |
|                     os.close(fd)
 | |
|                 else:
 | |
|                     close()
 | |
| 
 | |
|     __del__ = shutdown_rd
 | |
| 
 | |
|     def wait_input(self):
 | |
|         greensock2.wait_input(self.read_fd)
 | |
| 
 | |
|     def recv(self, bufsize):
 | |
| ##        f = open('LOG', 'a')
 | |
| ##        import os; print >> f, '[%d] RECV' % (os.getpid(),)
 | |
| ##        f.close()
 | |
|         res = greensock2.read(self.read_fd, bufsize)
 | |
| ##        f = open('LOG', 'a')
 | |
| ##        import os; print >> f, '[%d] RECV %r' % (os.getpid(), res)
 | |
| ##        f.close()
 | |
|         return res
 | |
| 
 | |
|     def recvall(self, bufsize):
 | |
|         return greensock2.readall(self.read_fd, bufsize)
 | |
| 
 | |
| 
 | |
| class FDOutput(object):
 | |
| 
 | |
|     def __init__(self, write_fd, close=True):
 | |
|         self.write_fd = write_fd
 | |
|         self._close = close     # a flag or a callback
 | |
| 
 | |
|     def shutdown_wr(self):
 | |
|         fd = self.write_fd
 | |
|         if fd is not None:
 | |
|             self.write_fd = None
 | |
|             close = self._close
 | |
|             if close:
 | |
|                 self._close = False
 | |
|                 if close == True:
 | |
|                     os.close(fd)
 | |
|                 else:
 | |
|                     close()
 | |
| 
 | |
|     __del__ = shutdown_wr
 | |
| 
 | |
|     def wait_output(self):
 | |
|         greensock2.wait_output(self.write_fd)
 | |
| 
 | |
|     def sendall(self, buffer):
 | |
| ##        f = open('LOG', 'a')
 | |
| ##        import os; print >> f, '[%d] %r' % (os.getpid(), buffer)
 | |
| ##        f.close()
 | |
|         greensock2.writeall(self.write_fd, buffer)
 |