blob: 8734ee893fb6f9ec0747266d7da4b31ab4f78ba6 [file] [log] [blame]
Gavin McDonald0b75e1a2010-10-28 02:12:01 +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
20// 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>
26#include <server/TThreadedServer.h>
27#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
33using boost::shared_ptr;
34using namespace apache::thrift;
35using namespace apache::thrift::protocol;
36using namespace apache::thrift::transport;
37using namespace apache::thrift::server;
38using namespace apache::thrift::concurrency;
39
40
41class ThreadsTestHandler : virtual public ThreadsTestIf {
42 public:
43 ThreadsTestHandler() {
44 // Your initialization goes here
45 }
46
47 int32_t threadOne(const int32_t sleep) {
48 // Your implementation goes here
49 printf("threadOne\n");
50 go2sleep(1, sleep);
51 return 1;
52 }
53
54 int32_t threadTwo(const int32_t sleep) {
55 // Your implementation goes here
56 printf("threadTwo\n");
57 go2sleep(2, sleep);
58 return 1;
59 }
60
61 int32_t threadThree(const int32_t sleep) {
62 // Your implementation goes here
63 printf("threadThree\n");
64 go2sleep(3, sleep);
65 return 1;
66 }
67
68 int32_t threadFour(const int32_t sleep) {
69 // Your implementation goes here
70 printf("threadFour\n");
71 go2sleep(4, sleep);
72 return 1;
73 }
74
75 int32_t stop() {
76 printf("stop\n");
77 server_->stop();
78 return 1;
79 }
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);
90 try {
91 m.wait(1000);
92 } catch(TimedOutException& e) {
93 }
94 }
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
111 /*
112 shared_ptr<ThreadManager> threadManager =
113 ThreadManager::newSimpleThreadManager(10);
114 shared_ptr<PosixThreadFactory> threadFactory =
115 shared_ptr<PosixThreadFactory>(new PosixThreadFactory());
116 threadManager->threadFactory(threadFactory);
117 threadManager->start();
118
119 shared_ptr<TServer> server =
120 shared_ptr<TServer>(new TThreadPoolServer(processor,
121 serverTransport,
122 transportFactory,
123 protocolFactory,
124 threadManager));
125 */
126
127 shared_ptr<TServer> server =
128 shared_ptr<TServer>(new TThreadedServer(processor,
129 serverTransport,
130 transportFactory,
131 protocolFactory));
132
133 handler->setServer(server);
134
135 server->serve();
136
137 fprintf(stderr, "done.\n");
138
139 return 0;
140}
141