blob: 8734ee893fb6f9ec0747266d7da4b31ab4f78ba6 [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"
24#include <protocol/TBinaryProtocol.h>
25#include <server/TThreadPoolServer.h>
Mark Slee02d1edc2007-03-07 05:17:25 +000026#include <server/TThreadedServer.h>
Mark Sleeb32f3c62007-03-05 04:48:48 +000027#include <transport/TServerSocket.h>
28#include <transport/TTransportUtils.h>
29#include <thrift/concurrency/Monitor.h>
30#include <thrift/concurrency/ThreadManager.h>
31#include <thrift/concurrency/PosixThreadFactory.h>
32
Mark Slee02d1edc2007-03-07 05:17:25 +000033using boost::shared_ptr;
T Jake Lucianib5e62212009-01-31 22:36:20 +000034using namespace apache::thrift;
35using namespace apache::thrift::protocol;
36using namespace apache::thrift::transport;
37using namespace apache::thrift::server;
38using namespace apache::thrift::concurrency;
Mark Sleeb32f3c62007-03-05 04:48:48 +000039
40
41class ThreadsTestHandler : virtual public ThreadsTestIf {
42 public:
43 ThreadsTestHandler() {
44 // Your initialization goes here
45 }
46
Mark Sleec416a272007-03-05 05:40:37 +000047 int32_t threadOne(const int32_t sleep) {
Mark Sleeb32f3c62007-03-05 04:48:48 +000048 // Your implementation goes here
49 printf("threadOne\n");
50 go2sleep(1, sleep);
Mark Sleec416a272007-03-05 05:40:37 +000051 return 1;
Mark Sleeb32f3c62007-03-05 04:48:48 +000052 }
53
Mark Sleec416a272007-03-05 05:40:37 +000054 int32_t threadTwo(const int32_t sleep) {
Mark Sleeb32f3c62007-03-05 04:48:48 +000055 // Your implementation goes here
56 printf("threadTwo\n");
57 go2sleep(2, sleep);
Mark Sleec416a272007-03-05 05:40:37 +000058 return 1;
Mark Sleeb32f3c62007-03-05 04:48:48 +000059 }
60
Mark Sleec416a272007-03-05 05:40:37 +000061 int32_t threadThree(const int32_t sleep) {
Mark Sleeb32f3c62007-03-05 04:48:48 +000062 // Your implementation goes here
63 printf("threadThree\n");
64 go2sleep(3, sleep);
Mark Sleec416a272007-03-05 05:40:37 +000065 return 1;
Mark Sleeb32f3c62007-03-05 04:48:48 +000066 }
67
Mark Sleec416a272007-03-05 05:40:37 +000068 int32_t threadFour(const int32_t sleep) {
Mark Sleeb32f3c62007-03-05 04:48:48 +000069 // Your implementation goes here
70 printf("threadFour\n");
71 go2sleep(4, sleep);
Mark Sleec416a272007-03-05 05:40:37 +000072 return 1;
Mark Sleeb32f3c62007-03-05 04:48:48 +000073 }
74
Mark Sleec416a272007-03-05 05:40:37 +000075 int32_t stop() {
Mark Sleeb32f3c62007-03-05 04:48:48 +000076 printf("stop\n");
77 server_->stop();
Mark Sleec416a272007-03-05 05:40:37 +000078 return 1;
Mark Sleeb32f3c62007-03-05 04:48:48 +000079 }
80
81 void setServer(boost::shared_ptr<TServer> server) {
82 server_ = server;
83 }
84
85protected:
86 void go2sleep(int thread, int seconds) {
87 Monitor m;
88 for (int i = 0; i < seconds; ++i) {
89 fprintf(stderr, "Thread %d: sleep %d\n", thread, i);
Marc Slemko3a3b53b2007-05-22 23:59:54 +000090 try {
91 m.wait(1000);
92 } catch(TimedOutException& e) {
93 }
Mark Sleeb32f3c62007-03-05 04:48:48 +000094 }
95 fprintf(stderr, "THREAD %d DONE\n", thread);
96 }
97
98private:
99 boost::shared_ptr<TServer> server_;
100
101};
102
103int main(int argc, char **argv) {
104 int port = 9090;
105 shared_ptr<ThreadsTestHandler> handler(new ThreadsTestHandler());
106 shared_ptr<TProcessor> processor(new ThreadsTestProcessor(handler));
107 shared_ptr<TServerTransport> serverTransport(new TServerSocket(port));
108 shared_ptr<TTransportFactory> transportFactory(new TBufferedTransportFactory());
109 shared_ptr<TProtocolFactory> protocolFactory(new TBinaryProtocolFactory());
110
Mark Slee02d1edc2007-03-07 05:17:25 +0000111 /*
David Reiss0c90f6f2008-02-06 22:18:40 +0000112 shared_ptr<ThreadManager> threadManager =
Mark Sleeb32f3c62007-03-05 04:48:48 +0000113 ThreadManager::newSimpleThreadManager(10);
114 shared_ptr<PosixThreadFactory> threadFactory =
115 shared_ptr<PosixThreadFactory>(new PosixThreadFactory());
116 threadManager->threadFactory(threadFactory);
117 threadManager->start();
David Reiss0c90f6f2008-02-06 22:18:40 +0000118
Mark Slee02d1edc2007-03-07 05:17:25 +0000119 shared_ptr<TServer> server =
Mark Sleeb32f3c62007-03-05 04:48:48 +0000120 shared_ptr<TServer>(new TThreadPoolServer(processor,
121 serverTransport,
122 transportFactory,
123 protocolFactory,
124 threadManager));
Mark Slee02d1edc2007-03-07 05:17:25 +0000125 */
Mark Sleeb32f3c62007-03-05 04:48:48 +0000126
Mark Slee02d1edc2007-03-07 05:17:25 +0000127 shared_ptr<TServer> server =
128 shared_ptr<TServer>(new TThreadedServer(processor,
129 serverTransport,
130 transportFactory,
131 protocolFactory));
Mark Sleeb32f3c62007-03-05 04:48:48 +0000132
Mark Slee02d1edc2007-03-07 05:17:25 +0000133 handler->setServer(server);
134
135 server->serve();
Mark Sleeb32f3c62007-03-05 04:48:48 +0000136
137 fprintf(stderr, "done.\n");
138
139 return 0;
140}
141