Advertisement
Guest User

Untitled

a guest
Dec 6th, 2016
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.03 KB | None | 0 0
  1. #!/usr/bin/env python
  2.  
  3. from twisted.internet import protocol, reactor, endpoints
  4. import datetime
  5. import os
  6.  
  7. # set each file to be 20 Mb
  8. file_size = 20000000
  9.  
  10. base_folder = "/home/marius/twisted-data/"
  11.  
  12. class DataProtocol(protocol.Protocol):
  13.     def __init__(self, addr):
  14.         self.addr = addr
  15.  
  16.         # which chunk part we're at
  17.         self.count = 0
  18.  
  19.         # check how much bytes we've written to the current file
  20.         self.bytes_written = 0
  21.  
  22.         self.fp = None
  23.        
  24.     def dataReceived(self, data):
  25.         # the amount of data received
  26.         bytes_remaining = len(data)
  27.        
  28.         while bytes_remaining > 0:
  29.             # we don't have an open fp, so we need to set up a new
  30.             if not self.fp:
  31.                 self.bytes_written = 0
  32.                 self.count += 1
  33.                 self.fp = open(os.path.join(base_folder, "%s%d-%d" % (self.addr.host, self.addr.port,
  34.                                                                       self.count)), 'wb')
  35.  
  36.             # we can write the whole chunk to file and there's still room
  37.             if self.bytes_written + bytes_remaining < file_size:
  38.                 self.fp.write(data)
  39.                 self.bytes_written += bytes_remaining
  40.                 break
  41.                
  42.             # we can fill the file, so close it and reset counters
  43.             elif self.bytes_written + bytes_remaining == file_size:
  44.                 self.fp.write(data)
  45.                 self.fp.close()
  46.                 self.fp = None
  47.                 break
  48.  
  49.             # we can't fit everything in the file
  50.             else:
  51.                 available = file_size - self.bytes_written
  52.                 self.fp.write(data[0:available])
  53.                 self.fp.close()
  54.                 self.fp = None
  55.                 bytes_remaining =- available
  56.                
  57. class DataFactory(protocol.Factory):
  58.     def buildProtocol(self, addr):
  59.         return DataProtocol(addr)
  60.  
  61. endpoints.serverFromString(reactor, "tcp:1234").listen(DataFactory())
  62. reactor.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement