blob: a267c3b90c46a28baae1b2667be3360d2aaa1596 [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 */
19
Mark Sleeb32f3c62007-03-05 04:48:48 +000020// This autogenerated skeleton file illustrates how to build a server.
21// You should copy it to another filename to avoid overwriting it.
22
23#include "ThreadsTest.h"
Roger Meier49ff8b12012-04-13 09:12:31 +000024#include <thrift/protocol/TBinaryProtocol.h>
25#include <thrift/server/TThreadPoolServer.h>
26#include <thrift/server/TThreadedServer.h>
27#include <thrift/transport/TServerSocket.h>
28#include <thrift/transport/TTransportUtils.h>
29#include <thrift/concurrency/Monitor.h>
30#include <thrift/concurrency/ThreadManager.h>
31#include <thrift/concurrency/PlatformThreadFactory.h>
Jake Farrell5d02b802014-01-07 21:42:01 -050032#if _WIN32
33 #include <thrift/windows/TWinsockSingleton.h>
34#endif
Mark Sleeb32f3c62007-03-05 04:48:48 +000035
Mark Slee02d1edc2007-03-07 05:17:25 +000036using boost::shared_ptr;
T Jake Lucianib5e62212009-01-31 22:36:20 +000037using namespace apache::thrift;
38using namespace apache::thrift::protocol;
39using namespace apache::thrift::transport;
40using namespace apache::thrift::server;
41using namespace apache::thrift::concurrency;
Mark Sleeb32f3c62007-03-05 04:48:48 +000042
43
44class ThreadsTestHandler : virtual public ThreadsTestIf {
45 public:
46 ThreadsTestHandler() {
47 // Your initialization goes here
48 }
49
Mark Sleec416a272007-03-05 05:40:37 +000050 int32_t threadOne(const int32_t sleep) {
Mark Sleeb32f3c62007-03-05 04:48:48 +000051 // Your implementation goes here
52 printf("threadOne\n");
53 go2sleep(1, sleep);
Mark Sleec416a272007-03-05 05:40:37 +000054 return 1;
Mark Sleeb32f3c62007-03-05 04:48:48 +000055 }
56
Mark Sleec416a272007-03-05 05:40:37 +000057 int32_t threadTwo(const int32_t sleep) {
Mark Sleeb32f3c62007-03-05 04:48:48 +000058 // Your implementation goes here
59 printf("threadTwo\n");
60 go2sleep(2, sleep);
Mark Sleec416a272007-03-05 05:40:37 +000061 return 1;
Mark Sleeb32f3c62007-03-05 04:48:48 +000062 }
63
Mark Sleec416a272007-03-05 05:40:37 +000064 int32_t threadThree(const int32_t sleep) {
Mark Sleeb32f3c62007-03-05 04:48:48 +000065 // Your implementation goes here
66 printf("threadThree\n");
67 go2sleep(3, sleep);
Mark Sleec416a272007-03-05 05:40:37 +000068 return 1;
Mark Sleeb32f3c62007-03-05 04:48:48 +000069 }
70
Mark Sleec416a272007-03-05 05:40:37 +000071 int32_t threadFour(const int32_t sleep) {
Mark Sleeb32f3c62007-03-05 04:48:48 +000072 // Your implementation goes here
73 printf("threadFour\n");
74 go2sleep(4, sleep);
Mark Sleec416a272007-03-05 05:40:37 +000075 return 1;
Mark Sleeb32f3c62007-03-05 04:48:48 +000076 }
77
Mark Sleec416a272007-03-05 05:40:37 +000078 int32_t stop() {
Mark Sleeb32f3c62007-03-05 04:48:48 +000079 printf("stop\n");
80 server_->stop();
Mark Sleec416a272007-03-05 05:40:37 +000081 return 1;
Mark Sleeb32f3c62007-03-05 04:48:48 +000082 }
83
84 void setServer(boost::shared_ptr<TServer> server) {
85 server_ = server;
86 }
87
88protected:
89 void go2sleep(int thread, int seconds) {
90 Monitor m;
Jake Farrell5d02b802014-01-07 21:42:01 -050091 Synchronized s(m);
Mark Sleeb32f3c62007-03-05 04:48:48 +000092 for (int i = 0; i < seconds; ++i) {
93 fprintf(stderr, "Thread %d: sleep %d\n", thread, i);
Marc Slemko3a3b53b2007-05-22 23:59:54 +000094 try {
95 m.wait(1000);
Jake Farrell5d02b802014-01-07 21:42:01 -050096 } catch(const TimedOutException&) {
Marc Slemko3a3b53b2007-05-22 23:59:54 +000097 }
Mark Sleeb32f3c62007-03-05 04:48:48 +000098 }
99 fprintf(stderr, "THREAD %d DONE\n", thread);
100 }
101
102private:
103 boost::shared_ptr<TServer> server_;
104
105};
106
107int main(int argc, char **argv) {
Jake Farrell5d02b802014-01-07 21:42:01 -0500108#if _WIN32
109 transport::TWinsockSingleton::create();
110#endif
Mark Sleeb32f3c62007-03-05 04:48:48 +0000111 int port = 9090;
112 shared_ptr<ThreadsTestHandler> handler(new ThreadsTestHandler());
113 shared_ptr<TProcessor> processor(new ThreadsTestProcessor(handler));
114 shared_ptr<TServerTransport> serverTransport(new TServerSocket(port));
115 shared_ptr<TTransportFactory> transportFactory(new TBufferedTransportFactory());
116 shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());
117
Mark Slee02d1edc2007-03-07 05:17:25 +0000118 /*
David Reiss0c90f6f2008-02-06 22:18:40 +0000119 shared_ptr<ThreadManager> threadManager =
Mark Sleeb32f3c62007-03-05 04:48:48 +0000120 ThreadManager::newSimpleThreadManager(10);
Roger Meier3faaedf2011-10-02 10:51:45 +0000121 shared_ptr<PlatformThreadFactory> threadFactory =
122 shared_ptr<PlatformThreadFactory>(new PlatformThreadFactory());
Mark Sleeb32f3c62007-03-05 04:48:48 +0000123 threadManager->threadFactory(threadFactory);
124 threadManager->start();
David Reiss0c90f6f2008-02-06 22:18:40 +0000125
Mark Slee02d1edc2007-03-07 05:17:25 +0000126 shared_ptr<TServer> server =
Mark Sleeb32f3c62007-03-05 04:48:48 +0000127 shared_ptr<TServer>(new TThreadPoolServer(processor,
128 serverTransport,
129 transportFactory,
130 protocolFactory,
131 threadManager));
Mark Slee02d1edc2007-03-07 05:17:25 +0000132 */
Mark Sleeb32f3c62007-03-05 04:48:48 +0000133
Mark Slee02d1edc2007-03-07 05:17:25 +0000134 shared_ptr<TServer> server =
135 shared_ptr<TServer>(new TThreadedServer(processor,
136 serverTransport,
137 transportFactory,
138 protocolFactory));
Mark Sleeb32f3c62007-03-05 04:48:48 +0000139
Mark Slee02d1edc2007-03-07 05:17:25 +0000140 handler->setServer(server);
141
142 server->serve();
Mark Sleeb32f3c62007-03-05 04:48:48 +0000143
144 fprintf(stderr, "done.\n");
145
146 return 0;
147}
148