r1361@opsdev009 (orig r71612): mcslee | 2007-11-27 17:51:43 -0800
[amiethrift.git] / lib / cpp / src / server / TThreadedServer.h
blob28d354911cefab32de4c8af114c65c6d53c0d5fe
1 // Copyright (c) 2006- Facebook
2 // Distributed under the Thrift Software License
3 //
4 // See accompanying file LICENSE or visit the Thrift site at:
5 // http://developers.facebook.com/thrift/
7 #ifndef _THRIFT_SERVER_TTHREADEDSERVER_H_
8 #define _THRIFT_SERVER_TTHREADEDSERVER_H_ 1
10 #include <server/TServer.h>
11 #include <transport/TServerTransport.h>
12 #include <concurrency/Monitor.h>
13 #include <concurrency/Thread.h>
15 #include <boost/shared_ptr.hpp>
17 namespace facebook { namespace thrift { namespace server {
19 using facebook::thrift::TProcessor;
20 using facebook::thrift::transport::TServerTransport;
21 using facebook::thrift::transport::TTransportFactory;
22 using facebook::thrift::concurrency::Monitor;
23 using facebook::thrift::concurrency::ThreadFactory;
25 class TThreadedServer : public TServer {
27 public:
28 class Task;
30 TThreadedServer(boost::shared_ptr<TProcessor> processor,
31 boost::shared_ptr<TServerTransport> serverTransport,
32 boost::shared_ptr<TTransportFactory> transportFactory,
33 boost::shared_ptr<TProtocolFactory> protocolFactory);
35 virtual ~TThreadedServer();
37 virtual void serve();
39 void stop() {
40 stop_ = true;
41 serverTransport_->interrupt();
44 protected:
45 boost::shared_ptr<ThreadFactory> threadFactory_;
46 volatile bool stop_;
48 Monitor tasksMonitor_;
49 std::set<Task*> tasks_;
53 }}} // facebook::thrift::server
55 #endif // #ifndef _THRIFT_SERVER_TTHREADEDSERVER_H_