blob: ad9c291d010ecb7a60087c30f0f5e1d475efa9c6 [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>
Mark Slee4af6ed72006-10-25 19:02:49 +00006#include <protocol/TBinaryProtocol.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 +000017/**
18 * Thrift server.
19 *
20 * @author Mark Slee <mcslee@facebook.com>
21 */
Aditya Agarwald622e962006-10-11 02:42:49 +000022class TServer : public concurrency::Runnable {
Marc Slemko16698852006-08-04 03:16:10 +000023public:
Mark Sleee8540632006-05-30 09:24:40 +000024 virtual ~TServer() {}
Mark Slee4af6ed72006-10-25 19:02:49 +000025
Mark Slee794993d2006-09-20 01:56:10 +000026 virtual void serve() = 0;
Aditya Agarwald622e962006-10-11 02:42:49 +000027
28 // Allows running the server as a Runnable thread
Mark Slee4af6ed72006-10-25 19:02:49 +000029 virtual void run() {
30 serve();
31 }
Marc Slemko16698852006-08-04 03:16:10 +000032
Mark Slee2f6404d2006-10-10 01:37:40 +000033 shared_ptr<TProcessor> getProcessor() {
34 return processor_;
35 }
Aditya Agarwal1ea90522007-01-19 02:02:12 +000036
37 shared_ptr<TServerTransport> getServerTransport() {
38 return serverTransport_;
39 }
40
Aditya Agarwal9abb0d62007-01-24 22:53:54 +000041 shared_ptr<TTransportFactory> getInputTransportFactory() {
42 return inputTransportFactory_;
43 }
44
45 shared_ptr<TTransportFactory> getOutputTransportFactory() {
46 return outputTransportFactory_;
Aditya Agarwal1ea90522007-01-19 02:02:12 +000047 }
Mark Slee2f6404d2006-10-10 01:37:40 +000048
Aditya Agarwal9abb0d62007-01-24 22:53:54 +000049 shared_ptr<TProtocolFactory> getInputProtocolFactory() {
50 return inputProtocolFactory_;
Mark Slee4af6ed72006-10-25 19:02:49 +000051 }
52
Aditya Agarwal9abb0d62007-01-24 22:53:54 +000053 shared_ptr<TProtocolFactory> getOutputProtocolFactory() {
54 return outputProtocolFactory_;
55 }
Aditya Agarwal1ea90522007-01-19 02:02:12 +000056
Marc Slemko16698852006-08-04 03:16:10 +000057protected:
Aditya Agarwal9abb0d62007-01-24 22:53:54 +000058 TServer(shared_ptr<TProcessor> processor):
59 processor_(processor) {
60 setInputTransportFactory(shared_ptr<TTransportFactory>(new TTransportFactory()));
61 setOutputTransportFactory(shared_ptr<TTransportFactory>(new TTransportFactory()));
62 setInputProtocolFactory(shared_ptr<TProtocolFactory>(new TBinaryProtocolFactory()));
63 setOutputProtocolFactory(shared_ptr<TProtocolFactory>(new TBinaryProtocolFactory()));
64 }
65
66 TServer(shared_ptr<TProcessor> processor,
67 shared_ptr<TServerTransport> serverTransport):
68 processor_(processor),
69 serverTransport_(serverTransport) {
70 setInputTransportFactory(shared_ptr<TTransportFactory>(new TTransportFactory()));
71 setOutputTransportFactory(shared_ptr<TTransportFactory>(new TTransportFactory()));
72 setInputProtocolFactory(shared_ptr<TProtocolFactory>(new TBinaryProtocolFactory()));
73 setOutputProtocolFactory(shared_ptr<TProtocolFactory>(new TBinaryProtocolFactory()));
74 }
75
Mark Sleed788b2e2006-09-07 01:26:35 +000076 TServer(shared_ptr<TProcessor> processor,
77 shared_ptr<TServerTransport> serverTransport,
78 shared_ptr<TTransportFactory> transportFactory,
Aditya Agarwal9abb0d62007-01-24 22:53:54 +000079 shared_ptr<TProtocolFactory> protocolFactory):
Mark Sleed788b2e2006-09-07 01:26:35 +000080 processor_(processor),
81 serverTransport_(serverTransport),
Aditya Agarwal9abb0d62007-01-24 22:53:54 +000082 inputTransportFactory_(transportFactory),
83 outputTransportFactory_(transportFactory),
84 inputProtocolFactory_(protocolFactory),
85 outputProtocolFactory_(protocolFactory) {}
Mark Sleed788b2e2006-09-07 01:26:35 +000086
87 TServer(shared_ptr<TProcessor> processor,
Mark Slee4af6ed72006-10-25 19:02:49 +000088 shared_ptr<TServerTransport> serverTransport,
Aditya Agarwal9abb0d62007-01-24 22:53:54 +000089 shared_ptr<TTransportFactory> inputTransportFactory,
90 shared_ptr<TTransportFactory> outputTransportFactory,
91 shared_ptr<TProtocolFactory> inputProtocolFactory,
92 shared_ptr<TProtocolFactory> outputProtocolFactory):
Mark Slee4af6ed72006-10-25 19:02:49 +000093 processor_(processor),
94 serverTransport_(serverTransport),
Aditya Agarwal9abb0d62007-01-24 22:53:54 +000095 inputTransportFactory_(inputTransportFactory),
96 outputTransportFactory_(outputTransportFactory),
97 inputProtocolFactory_(inputProtocolFactory),
98 outputProtocolFactory_(outputProtocolFactory) {}
Mark Slee4af6ed72006-10-25 19:02:49 +000099
Mark Sleed788b2e2006-09-07 01:26:35 +0000100
Aditya Agarwal9abb0d62007-01-24 22:53:54 +0000101 // Class variables
Marc Slemko16698852006-08-04 03:16:10 +0000102 shared_ptr<TProcessor> processor_;
Mark Sleed788b2e2006-09-07 01:26:35 +0000103 shared_ptr<TServerTransport> serverTransport_;
Aditya Agarwal9abb0d62007-01-24 22:53:54 +0000104
105 shared_ptr<TTransportFactory> inputTransportFactory_;
106 shared_ptr<TTransportFactory> outputTransportFactory_;
107
108 shared_ptr<TProtocolFactory> inputProtocolFactory_;
109 shared_ptr<TProtocolFactory> outputProtocolFactory_;
110
111 void setInputTransportFactory(shared_ptr<TTransportFactory> inputTransportFactory) {
112 inputTransportFactory_ = inputTransportFactory;
113 }
114
115 void setOutputTransportFactory(shared_ptr<TTransportFactory> outputTransportFactory) {
116 outputTransportFactory_ = outputTransportFactory;
117 }
118
119 void setInputProtocolFactory(shared_ptr<TProtocolFactory> inputProtocolFactory) {
120 inputProtocolFactory_ = inputProtocolFactory;
121 }
122
123 void setOutputProtocolFactory(shared_ptr<TProtocolFactory> outputProtocolFactory) {
124 outputProtocolFactory_ = outputProtocolFactory;
125 }
126
Mark Sleee8540632006-05-30 09:24:40 +0000127};
Marc Slemko16698852006-08-04 03:16:10 +0000128
Marc Slemko6f038a72006-08-03 18:58:09 +0000129}}} // facebook::thrift::server
130
Mark Sleed788b2e2006-09-07 01:26:35 +0000131#endif // #ifndef _THRIFT_SERVER_TSERVER_H_