Converted concurrency classes to use boost::shared_ptr and boost::weak_ptr:
authorMarc Slemko <marc@apache.org>
Thu, 3 Aug 2006 19:01:37 +0000 (19:01 +0000)
committerMarc Slemko <marc@apache.org>
Thu, 3 Aug 2006 19:01:37 +0000 (19:01 +0000)
Wrapped all thrift code in facebook::thrift:: namespace

git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@664736 13f79535-47bb-0310-9956-ffa450edef68

lib/cpp/src/server/TThreadPoolServer.cc [new file with mode: 0644]
lib/cpp/src/server/TThreadPoolServer.h [new file with mode: 0644]

diff --git a/lib/cpp/src/server/TThreadPoolServer.cc b/lib/cpp/src/server/TThreadPoolServer.cc
new file mode 100644 (file)
index 0000000..2d6290c
--- /dev/null
@@ -0,0 +1,98 @@
+#include "server/TThreadPoolServer.h"
+#include "transport/TBufferedTransport.h"
+#include "transport/TTransportException.h"
+#include "concurrency/Thread.h"
+#include "concurrency/ThreadManager.h"
+#include <string>
+#include <iostream>
+
+namespace facebook { namespace thrift { namespace server { 
+
+using namespace std;
+using namespace facebook::thrift::concurrency;
+using namespace facebook::thrift::transport;
+
+class TThreadPoolServer : public TServer {
+
+  class Task: public Runnable {
+    
+    TProcessor* _processor;
+    TTransport* _transport;
+    TBufferedTransport _bufferedTransport;
+    
+  public:
+    
+    Task(TProcessor* processor,
+        TTransport* transport) :
+      _processor(processor),
+      _transport(transport),
+      _bufferedTransport(_transport) {
+    }
+    
+    ~Task() {
+      delete _transport;
+    }
+    
+    void run() {
+      
+      while(true) {
+       
+       try {
+         _processor->process(&_bufferedTransport);
+
+       } catch (TTransportException& ttx) {
+
+         break;
+
+       } catch(...) {
+
+         break;
+       }
+      }
+      
+      _bufferedTransport.close();
+    }
+  };
+  
+  TThreadPoolServer(TProcessor* processor,
+                   TServerOptions* options,
+                   TServerTransport* serverTransport,
+                   ThreadManager* threadManager) :
+    TServer(processor, options), 
+    serverTransport_(serverTransport), 
+    threadManager_(threadManager) {
+  }
+    
+  ~TThreadPoolServer() {}
+
+ protected:
+
+  TServerTransport* serverTransport_;
+  ThreadManager* threadManager_;
+  
+  void run() {
+
+    try {
+      // Start the server listening
+      serverTransport_->listen();
+    } catch (TTransportException& ttx) {
+      cerr << "TThreadPoolServer::run() listen(): " << ttx.getMessage() << endl;
+      return;
+    }
+
+    // Fetch client from server
+
+    while (true) {
+
+      try {
+
+       threadManager_->add(shared_ptr<Task>(new TThreadPoolServer::Task(processor_, serverTransport_->accept())));;
+
+      } catch (TTransportException& ttx) {
+       break;
+      }
+    }
+  }
+};
+
+}}} // facebook::thrift::server
diff --git a/lib/cpp/src/server/TThreadPoolServer.h b/lib/cpp/src/server/TThreadPoolServer.h
new file mode 100644 (file)
index 0000000..ef63a37
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef T_THREADPOOL_SERVER_H
+#define T_THREADPOOL_SERVER_H
+
+#include "server/TServer.h"
+#include "transport/TServerTransport.h"
+
+namespace facebook { namespace thrift { namespace server { 
+}}} // facebook::thrift::server
+
+#endif