blob: ea40ab0975821dd2fe6452f4d1329f853067ae1c [file] [log] [blame]
David Reissea2cba82009-03-30 21:35:00 +00001/*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
Mark Slee9f0c6512007-02-28 23:58:26 +000019
Mark Sleed788b2e2006-09-07 01:26:35 +000020#ifndef _THRIFT_SERVER_TSIMPLESERVER_H_
21#define _THRIFT_SERVER_TSIMPLESERVER_H_ 1
Mark Sleee8540632006-05-30 09:24:40 +000022
23#include "server/TServer.h"
24#include "transport/TServerTransport.h"
25
T Jake Lucianib5e62212009-01-31 22:36:20 +000026namespace apache { namespace thrift { namespace server {
Marc Slemko6f038a72006-08-03 18:58:09 +000027
Mark Sleee8540632006-05-30 09:24:40 +000028/**
29 * This is the most basic simple server. It is single-threaded and runs a
30 * continuous loop of accepting a single connection, processing requests on
31 * that connection until it closes, and then repeating. It is a good example
32 * of how to extend the TServer interface.
33 *
Mark Sleee8540632006-05-30 09:24:40 +000034 */
35class TSimpleServer : public TServer {
36 public:
Bryan Duxbury7a9fb812011-09-01 18:31:53 +000037 template<typename ProcessorFactory>
38 TSimpleServer(
39 const boost::shared_ptr<ProcessorFactory>& processorFactory,
40 const boost::shared_ptr<TServerTransport>& serverTransport,
41 const boost::shared_ptr<TTransportFactory>& transportFactory,
42 const boost::shared_ptr<TProtocolFactory>& protocolFactory,
43 THRIFT_OVERLOAD_IF(ProcessorFactory, TProcessorFactory)) :
44 TServer(processorFactory, serverTransport, transportFactory,
45 protocolFactory),
46 stop_(false) {}
47
48 template<typename Processor>
49 TSimpleServer(
50 const boost::shared_ptr<Processor>& processor,
51 const boost::shared_ptr<TServerTransport>& serverTransport,
52 const boost::shared_ptr<TTransportFactory>& transportFactory,
53 const boost::shared_ptr<TProtocolFactory>& protocolFactory,
54 THRIFT_OVERLOAD_IF(Processor, TProcessor)) :
Mark Slee6e3f6372007-03-01 22:05:46 +000055 TServer(processor, serverTransport, transportFactory, protocolFactory),
56 stop_(false) {}
Aditya Agarwal9abb0d62007-01-24 22:53:54 +000057
Bryan Duxbury7a9fb812011-09-01 18:31:53 +000058 template<typename ProcessorFactory>
59 TSimpleServer(
60 const boost::shared_ptr<ProcessorFactory>& processorFactory,
61 const boost::shared_ptr<TServerTransport>& serverTransport,
62 const boost::shared_ptr<TTransportFactory>& inputTransportFactory,
63 const boost::shared_ptr<TTransportFactory>& outputTransportFactory,
64 const boost::shared_ptr<TProtocolFactory>& inputProtocolFactory,
65 const boost::shared_ptr<TProtocolFactory>& outputProtocolFactory,
66 THRIFT_OVERLOAD_IF(ProcessorFactory, TProcessorFactory)) :
67 TServer(processorFactory, serverTransport,
68 inputTransportFactory, outputTransportFactory,
69 inputProtocolFactory, outputProtocolFactory),
70 stop_(false) {}
71
72 template<typename Processor>
73 TSimpleServer(
74 const boost::shared_ptr<Processor>& processor,
75 const boost::shared_ptr<TServerTransport>& serverTransport,
76 const boost::shared_ptr<TTransportFactory>& inputTransportFactory,
77 const boost::shared_ptr<TTransportFactory>& outputTransportFactory,
78 const boost::shared_ptr<TProtocolFactory>& inputProtocolFactory,
79 const boost::shared_ptr<TProtocolFactory>& outputProtocolFactory,
80 THRIFT_OVERLOAD_IF(Processor, TProcessor)) :
Mark Sleeb4d3e7b2007-11-28 01:51:43 +000081 TServer(processor, serverTransport,
Aditya Agarwal9abb0d62007-01-24 22:53:54 +000082 inputTransportFactory, outputTransportFactory,
Mark Slee6e3f6372007-03-01 22:05:46 +000083 inputProtocolFactory, outputProtocolFactory),
84 stop_(false) {}
Mark Sleeb4d3e7b2007-11-28 01:51:43 +000085
Mark Sleee8540632006-05-30 09:24:40 +000086 ~TSimpleServer() {}
87
Mark Slee794993d2006-09-20 01:56:10 +000088 void serve();
Mark Sleee8540632006-05-30 09:24:40 +000089
Mark Slee6e3f6372007-03-01 22:05:46 +000090 void stop() {
91 stop_ = true;
Bryan Duxbury383e9492010-09-02 15:16:56 +000092 serverTransport_->interrupt();
Mark Slee6e3f6372007-03-01 22:05:46 +000093 }
94
95 protected:
96 bool stop_;
97
Mark Sleee8540632006-05-30 09:24:40 +000098};
99
T Jake Lucianib5e62212009-01-31 22:36:20 +0000100}}} // apache::thrift::server
Marc Slemko6f038a72006-08-03 18:58:09 +0000101
Mark Sleed788b2e2006-09-07 01:26:35 +0000102#endif // #ifndef _THRIFT_SERVER_TSIMPLESERVER_H_