blob: 293aa28528416f96938e8c9ad7ba80f298382e5b [file] [log] [blame]
Mark Sleed788b2e2006-09-07 01:26:35 +00001#ifndef _THRIFT_SERVER_TSERVER_H_
2#define _THRIFT_SERVER_TSERVER_H_ 1
Mark Sleee8540632006-05-30 09:24:40 +00003
Marc Slemko16698852006-08-04 03:16:10 +00004#include <TProcessor.h>
Mark Sleed788b2e2006-09-07 01:26:35 +00005#include <transport/TServerTransport.h>
6#include <transport/TTransportFactory.h>
Marc Slemko3ea00332006-08-17 01:11:13 +00007#include <concurrency/Thread.h>
Marc Slemko16698852006-08-04 03:16:10 +00008
9#include <boost/shared_ptr.hpp>
Mark Sleee8540632006-05-30 09:24:40 +000010
Marc Slemko6f038a72006-08-03 18:58:09 +000011namespace facebook { namespace thrift { namespace server {
12
13using namespace facebook::thrift;
Mark Sleed788b2e2006-09-07 01:26:35 +000014using namespace facebook::thrift::transport;
Marc Slemko16698852006-08-04 03:16:10 +000015using namespace boost;
Marc Slemko6f038a72006-08-03 18:58:09 +000016
Mark Sleee8540632006-05-30 09:24:40 +000017class TServerOptions;
18
19/**
20 * Thrift server.
21 *
22 * @author Mark Slee <mcslee@facebook.com>
23 */
Aditya Agarwald622e962006-10-11 02:42:49 +000024class TServer : public concurrency::Runnable {
Marc Slemko16698852006-08-04 03:16:10 +000025public:
Mark Sleee8540632006-05-30 09:24:40 +000026 virtual ~TServer() {}
Mark Slee794993d2006-09-20 01:56:10 +000027 virtual void serve() = 0;
Aditya Agarwald622e962006-10-11 02:42:49 +000028
29 // Allows running the server as a Runnable thread
30 virtual void run() { serve(); }
Marc Slemko16698852006-08-04 03:16:10 +000031
Mark Slee2f6404d2006-10-10 01:37:40 +000032 shared_ptr<TProcessor> getProcessor() {
33 return processor_;
34 }
35
Marc Slemko16698852006-08-04 03:16:10 +000036protected:
Mark Sleed788b2e2006-09-07 01:26:35 +000037 TServer(shared_ptr<TProcessor> processor,
38 shared_ptr<TServerTransport> serverTransport,
39 shared_ptr<TTransportFactory> transportFactory,
40 shared_ptr<TServerOptions> options) :
41 processor_(processor),
42 serverTransport_(serverTransport),
43 transportFactory_(transportFactory),
44 options_(options) {}
45
46 TServer(shared_ptr<TProcessor> processor,
47 shared_ptr<TServerOptions> options) :
Mark Slee8d7e1f62006-06-07 06:48:56 +000048 processor_(processor), options_(options) {}
Mark Sleed788b2e2006-09-07 01:26:35 +000049
Marc Slemko16698852006-08-04 03:16:10 +000050 shared_ptr<TProcessor> processor_;
Mark Sleed788b2e2006-09-07 01:26:35 +000051 shared_ptr<TServerTransport> serverTransport_;
52 shared_ptr<TTransportFactory> transportFactory_;
Marc Slemko16698852006-08-04 03:16:10 +000053 shared_ptr<TServerOptions> options_;
Mark Sleee8540632006-05-30 09:24:40 +000054};
Marc Slemko16698852006-08-04 03:16:10 +000055
Mark Sleee8540632006-05-30 09:24:40 +000056/**
57 * Class to encapsulate all generic server options.
58 */
59class TServerOptions {
Mark Sleed788b2e2006-09-07 01:26:35 +000060 public:
Mark Sleee8540632006-05-30 09:24:40 +000061 // TODO(mcslee): Fill in getters/setters here
Mark Sleed788b2e2006-09-07 01:26:35 +000062 protected:
Mark Sleee8540632006-05-30 09:24:40 +000063 // TODO(mcslee): Fill data members in here
64};
65
Marc Slemko6f038a72006-08-03 18:58:09 +000066}}} // facebook::thrift::server
67
Mark Sleed788b2e2006-09-07 01:26:35 +000068#endif // #ifndef _THRIFT_SERVER_TSERVER_H_