File indexing completed on 2026-04-17 08:35:02
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020 #ifndef _THRIFT_SERVER_TSERVER_H_
0021 #define _THRIFT_SERVER_TSERVER_H_ 1
0022
0023 #include <thrift/TProcessor.h>
0024 #include <thrift/transport/TServerTransport.h>
0025 #include <thrift/protocol/TBinaryProtocol.h>
0026 #include <thrift/concurrency/Thread.h>
0027
0028 #include <memory>
0029
0030 namespace apache {
0031 namespace thrift {
0032 namespace server {
0033
0034 using apache::thrift::TProcessor;
0035 using apache::thrift::protocol::TBinaryProtocolFactory;
0036 using apache::thrift::protocol::TProtocol;
0037 using apache::thrift::protocol::TProtocolFactory;
0038 using apache::thrift::transport::TServerTransport;
0039 using apache::thrift::transport::TTransport;
0040 using apache::thrift::transport::TTransportFactory;
0041
0042
0043
0044
0045
0046
0047
0048
0049 class TServerEventHandler {
0050 public:
0051 virtual ~TServerEventHandler() = default;
0052
0053
0054
0055
0056 virtual void preServe() {}
0057
0058
0059
0060
0061 virtual void* createContext(std::shared_ptr<TProtocol> input,
0062 std::shared_ptr<TProtocol> output) {
0063 (void)input;
0064 (void)output;
0065 return nullptr;
0066 }
0067
0068
0069
0070
0071
0072 virtual void deleteContext(void* serverContext,
0073 std::shared_ptr<TProtocol> input,
0074 std::shared_ptr<TProtocol> output) {
0075 (void)serverContext;
0076 (void)input;
0077 (void)output;
0078 }
0079
0080
0081
0082
0083 virtual void processContext(void* serverContext, std::shared_ptr<TTransport> transport) {
0084 (void)serverContext;
0085 (void)transport;
0086 }
0087
0088 protected:
0089
0090
0091
0092 TServerEventHandler() = default;
0093 };
0094
0095
0096
0097
0098
0099 class TServer : public concurrency::Runnable {
0100 public:
0101 ~TServer() override = default;
0102
0103 virtual void serve() = 0;
0104
0105 virtual void stop() {}
0106
0107
0108 void run() override { serve(); }
0109
0110 std::shared_ptr<TProcessorFactory> getProcessorFactory() { return processorFactory_; }
0111
0112 std::shared_ptr<TServerTransport> getServerTransport() { return serverTransport_; }
0113
0114 std::shared_ptr<TTransportFactory> getInputTransportFactory() { return inputTransportFactory_; }
0115
0116 std::shared_ptr<TTransportFactory> getOutputTransportFactory() {
0117 return outputTransportFactory_;
0118 }
0119
0120 std::shared_ptr<TProtocolFactory> getInputProtocolFactory() { return inputProtocolFactory_; }
0121
0122 std::shared_ptr<TProtocolFactory> getOutputProtocolFactory() { return outputProtocolFactory_; }
0123
0124 std::shared_ptr<TServerEventHandler> getEventHandler() { return eventHandler_; }
0125
0126 protected:
0127 TServer(const std::shared_ptr<TProcessorFactory>& processorFactory)
0128 : processorFactory_(processorFactory) {
0129 setInputTransportFactory(std::shared_ptr<TTransportFactory>(new TTransportFactory()));
0130 setOutputTransportFactory(std::shared_ptr<TTransportFactory>(new TTransportFactory()));
0131 setInputProtocolFactory(std::shared_ptr<TProtocolFactory>(new TBinaryProtocolFactory()));
0132 setOutputProtocolFactory(std::shared_ptr<TProtocolFactory>(new TBinaryProtocolFactory()));
0133 }
0134
0135 TServer(const std::shared_ptr<TProcessor>& processor)
0136 : processorFactory_(new TSingletonProcessorFactory(processor)) {
0137 setInputTransportFactory(std::shared_ptr<TTransportFactory>(new TTransportFactory()));
0138 setOutputTransportFactory(std::shared_ptr<TTransportFactory>(new TTransportFactory()));
0139 setInputProtocolFactory(std::shared_ptr<TProtocolFactory>(new TBinaryProtocolFactory()));
0140 setOutputProtocolFactory(std::shared_ptr<TProtocolFactory>(new TBinaryProtocolFactory()));
0141 }
0142
0143 TServer(const std::shared_ptr<TProcessorFactory>& processorFactory,
0144 const std::shared_ptr<TServerTransport>& serverTransport)
0145 : processorFactory_(processorFactory), serverTransport_(serverTransport) {
0146 setInputTransportFactory(std::shared_ptr<TTransportFactory>(new TTransportFactory()));
0147 setOutputTransportFactory(std::shared_ptr<TTransportFactory>(new TTransportFactory()));
0148 setInputProtocolFactory(std::shared_ptr<TProtocolFactory>(new TBinaryProtocolFactory()));
0149 setOutputProtocolFactory(std::shared_ptr<TProtocolFactory>(new TBinaryProtocolFactory()));
0150 }
0151
0152 TServer(const std::shared_ptr<TProcessor>& processor,
0153 const std::shared_ptr<TServerTransport>& serverTransport)
0154 : processorFactory_(new TSingletonProcessorFactory(processor)),
0155 serverTransport_(serverTransport) {
0156 setInputTransportFactory(std::shared_ptr<TTransportFactory>(new TTransportFactory()));
0157 setOutputTransportFactory(std::shared_ptr<TTransportFactory>(new TTransportFactory()));
0158 setInputProtocolFactory(std::shared_ptr<TProtocolFactory>(new TBinaryProtocolFactory()));
0159 setOutputProtocolFactory(std::shared_ptr<TProtocolFactory>(new TBinaryProtocolFactory()));
0160 }
0161
0162 TServer(const std::shared_ptr<TProcessorFactory>& processorFactory,
0163 const std::shared_ptr<TServerTransport>& serverTransport,
0164 const std::shared_ptr<TTransportFactory>& transportFactory,
0165 const std::shared_ptr<TProtocolFactory>& protocolFactory)
0166 : processorFactory_(processorFactory),
0167 serverTransport_(serverTransport),
0168 inputTransportFactory_(transportFactory),
0169 outputTransportFactory_(transportFactory),
0170 inputProtocolFactory_(protocolFactory),
0171 outputProtocolFactory_(protocolFactory) {}
0172
0173 TServer(const std::shared_ptr<TProcessor>& processor,
0174 const std::shared_ptr<TServerTransport>& serverTransport,
0175 const std::shared_ptr<TTransportFactory>& transportFactory,
0176 const std::shared_ptr<TProtocolFactory>& protocolFactory)
0177 : processorFactory_(new TSingletonProcessorFactory(processor)),
0178 serverTransport_(serverTransport),
0179 inputTransportFactory_(transportFactory),
0180 outputTransportFactory_(transportFactory),
0181 inputProtocolFactory_(protocolFactory),
0182 outputProtocolFactory_(protocolFactory) {}
0183
0184 TServer(const std::shared_ptr<TProcessorFactory>& processorFactory,
0185 const std::shared_ptr<TServerTransport>& serverTransport,
0186 const std::shared_ptr<TTransportFactory>& inputTransportFactory,
0187 const std::shared_ptr<TTransportFactory>& outputTransportFactory,
0188 const std::shared_ptr<TProtocolFactory>& inputProtocolFactory,
0189 const std::shared_ptr<TProtocolFactory>& outputProtocolFactory)
0190 : processorFactory_(processorFactory),
0191 serverTransport_(serverTransport),
0192 inputTransportFactory_(inputTransportFactory),
0193 outputTransportFactory_(outputTransportFactory),
0194 inputProtocolFactory_(inputProtocolFactory),
0195 outputProtocolFactory_(outputProtocolFactory) {}
0196
0197 TServer(const std::shared_ptr<TProcessor>& processor,
0198 const std::shared_ptr<TServerTransport>& serverTransport,
0199 const std::shared_ptr<TTransportFactory>& inputTransportFactory,
0200 const std::shared_ptr<TTransportFactory>& outputTransportFactory,
0201 const std::shared_ptr<TProtocolFactory>& inputProtocolFactory,
0202 const std::shared_ptr<TProtocolFactory>& outputProtocolFactory)
0203 : processorFactory_(new TSingletonProcessorFactory(processor)),
0204 serverTransport_(serverTransport),
0205 inputTransportFactory_(inputTransportFactory),
0206 outputTransportFactory_(outputTransportFactory),
0207 inputProtocolFactory_(inputProtocolFactory),
0208 outputProtocolFactory_(outputProtocolFactory) {}
0209
0210
0211
0212
0213
0214
0215
0216
0217 std::shared_ptr<TProcessor> getProcessor(std::shared_ptr<TProtocol> inputProtocol,
0218 std::shared_ptr<TProtocol> outputProtocol,
0219 std::shared_ptr<TTransport> transport) {
0220 TConnectionInfo connInfo;
0221 connInfo.input = inputProtocol;
0222 connInfo.output = outputProtocol;
0223 connInfo.transport = transport;
0224 return processorFactory_->getProcessor(connInfo);
0225 }
0226
0227
0228 std::shared_ptr<TProcessorFactory> processorFactory_;
0229 std::shared_ptr<TServerTransport> serverTransport_;
0230
0231 std::shared_ptr<TTransportFactory> inputTransportFactory_;
0232 std::shared_ptr<TTransportFactory> outputTransportFactory_;
0233
0234 std::shared_ptr<TProtocolFactory> inputProtocolFactory_;
0235 std::shared_ptr<TProtocolFactory> outputProtocolFactory_;
0236
0237 std::shared_ptr<TServerEventHandler> eventHandler_;
0238
0239 public:
0240 void setInputTransportFactory(std::shared_ptr<TTransportFactory> inputTransportFactory) {
0241 inputTransportFactory_ = inputTransportFactory;
0242 }
0243
0244 void setOutputTransportFactory(std::shared_ptr<TTransportFactory> outputTransportFactory) {
0245 outputTransportFactory_ = outputTransportFactory;
0246 }
0247
0248 void setInputProtocolFactory(std::shared_ptr<TProtocolFactory> inputProtocolFactory) {
0249 inputProtocolFactory_ = inputProtocolFactory;
0250 }
0251
0252 void setOutputProtocolFactory(std::shared_ptr<TProtocolFactory> outputProtocolFactory) {
0253 outputProtocolFactory_ = outputProtocolFactory;
0254 }
0255
0256 void setServerEventHandler(std::shared_ptr<TServerEventHandler> eventHandler) {
0257 eventHandler_ = eventHandler;
0258 }
0259 };
0260
0261
0262
0263
0264
0265
0266 #ifdef HAVE_SYS_RESOURCE_H
0267 int increase_max_fds(int max_fds = (1 << 24));
0268 #endif
0269 }
0270 }
0271 }
0272
0273 #endif