Thrift TTransportFactory model for servers

Summary: Servers need to create bufferedtransports etc. around the transports they get in a user-definable way. So use a factory pattern to allow the user to supply an object to the server that defines this behavior.


git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@664792 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/py/src/server/TServer.py b/lib/py/src/server/TServer.py
index a5d5621..53f6846 100644
--- a/lib/py/src/server/TServer.py
+++ b/lib/py/src/server/TServer.py
@@ -8,8 +8,13 @@
 
   """Base interface for a server, which must have a run method."""
 
-  def __init__(self, proc):
-    self.processor = proc
+  def __init__(self, processor, serverTransport, transportFactory=None):
+    self.processor = processor
+    self.serverTransport = serverTransport
+    if transportFactory == None:
+      self.transportFactory = TTransport.TTransportFactoryBase()
+    else:
+      self.transportFactory = transportFactory
 
   def run(self):
     pass
@@ -18,18 +23,20 @@
 
   """Simple single-threaded server that just pumps around one transport."""
 
-  def __init__(self, proc, trans):
-    TServer.__init__(self, proc)
-    self.transport = trans
+  def __init__(self, processor, serverTransport, transportFactory=None):
+    TServer.__init__(self, processor, serverTransport, transportFactory)
 
   def run(self):
-    self.transport.listen()
+    self.serverTransport.listen()
     while True:
-      client = TTransport.TBufferedTransport(self.transport.accept())
+      client = self.serverTransport.accept()
+      (input, output) = self.transportFactory.getIOTransports(client)
       try:
         while True:
-          self.processor.process(client, client)
+          self.processor.process(input, output)
       except Exception, x:
         print '%s, %s, %s' % (type(x), x, traceback.format_exc())
         print 'Client died.'
-      client.close()
+
+      input.close()
+      output.close()