Subversion Repositories SmartDukaan

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
30 ashish 1
/*
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
 
33
using boost::shared_ptr;
34
using namespace apache::thrift;
35
using namespace apache::thrift::protocol;
36
using namespace apache::thrift::transport;
37
using namespace apache::thrift::server;
38
using namespace apache::thrift::concurrency;
39
 
40
 
41
class 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
 
85
protected:
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
 
98
private:
99
  boost::shared_ptr<TServer> server_;
100
 
101
};
102
 
103
int 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