blob: cb127c72935f3a22d345bc8c732c693f4f95f050 [file] [log] [blame]
Mark Slee7eb0d632007-03-01 00:00:27 +00001// Copyright (c) 2006- Facebook
2// Distributed under the Thrift Software License
3//
4// See accompanying file LICENSE or visit the Thrift site at:
5// http://developers.facebook.com/thrift/
6
Mark Slee83c52a82006-06-07 06:51:18 +00007package com.facebook.thrift.server;
8
9import com.facebook.thrift.TException;
10import com.facebook.thrift.TProcessor;
Mark Slee448849d2007-05-31 01:30:22 +000011import com.facebook.thrift.TProcessorFactory;
Mark Slee456b7a82006-10-25 20:53:37 +000012import com.facebook.thrift.protocol.TProtocol;
13import com.facebook.thrift.protocol.TProtocolFactory;
Mark Slee83c52a82006-06-07 06:51:18 +000014import com.facebook.thrift.transport.TServerTransport;
15import com.facebook.thrift.transport.TTransport;
Aditya Agarwal5a429582007-02-06 02:51:15 +000016import com.facebook.thrift.transport.TTransportFactory;
Mark Slee83c52a82006-06-07 06:51:18 +000017import com.facebook.thrift.transport.TTransportException;
18
19/**
20 * Simple singlethreaded server for testing.
21 *
22 * @author Mark Slee <mcslee@facebook.com>
23 */
24public class TSimpleServer extends TServer {
25
Mark Slee0502e612007-11-03 05:30:32 +000026 private boolean stopped_ = false;
27
Mark Slee83c52a82006-06-07 06:51:18 +000028 public TSimpleServer(TProcessor processor,
Mark Sleeffcddd62006-09-06 20:37:03 +000029 TServerTransport serverTransport) {
Mark Slee448849d2007-05-31 01:30:22 +000030 super(new TProcessorFactory(processor), serverTransport);
Mark Slee83c52a82006-06-07 06:51:18 +000031 }
32
Aditya Agarwal5a429582007-02-06 02:51:15 +000033 public TSimpleServer(TProcessor processor,
34 TServerTransport serverTransport,
35 TTransportFactory transportFactory,
36 TProtocolFactory protocolFactory) {
Mark Slee448849d2007-05-31 01:30:22 +000037 super(new TProcessorFactory(processor), serverTransport, transportFactory, protocolFactory);
Aditya Agarwal5a429582007-02-06 02:51:15 +000038 }
39
40 public TSimpleServer(TProcessor processor,
41 TServerTransport serverTransport,
42 TTransportFactory inputTransportFactory,
43 TTransportFactory outputTransportFactory,
44 TProtocolFactory inputProtocolFactory,
45 TProtocolFactory outputProtocolFactory) {
Mark Slee448849d2007-05-31 01:30:22 +000046 super(new TProcessorFactory(processor), serverTransport,
Aditya Agarwal5a429582007-02-06 02:51:15 +000047 inputTransportFactory, outputTransportFactory,
48 inputProtocolFactory, outputProtocolFactory);
49 }
50
Mark Slee448849d2007-05-31 01:30:22 +000051 public TSimpleServer(TProcessorFactory processorFactory,
52 TServerTransport serverTransport) {
53 super(processorFactory, serverTransport);
54 }
55
56 public TSimpleServer(TProcessorFactory processorFactory,
57 TServerTransport serverTransport,
58 TTransportFactory transportFactory,
59 TProtocolFactory protocolFactory) {
60 super(processorFactory, serverTransport, transportFactory, protocolFactory);
61 }
62
63 public TSimpleServer(TProcessorFactory processorFactory,
64 TServerTransport serverTransport,
65 TTransportFactory inputTransportFactory,
66 TTransportFactory outputTransportFactory,
67 TProtocolFactory inputProtocolFactory,
68 TProtocolFactory outputProtocolFactory) {
69 super(processorFactory, serverTransport,
70 inputTransportFactory, outputTransportFactory,
71 inputProtocolFactory, outputProtocolFactory);
72 }
73
74
Mark Slee4e755ca2006-09-12 00:46:08 +000075 public void serve() {
Mark Slee0502e612007-11-03 05:30:32 +000076 stopped_ = false;
Mark Slee83c52a82006-06-07 06:51:18 +000077 try {
78 serverTransport_.listen();
79 } catch (TTransportException ttx) {
80 ttx.printStackTrace();
81 return;
82 }
83
Mark Slee0502e612007-11-03 05:30:32 +000084 while (!stopped_) {
Mark Slee83c52a82006-06-07 06:51:18 +000085 TTransport client = null;
Mark Slee448849d2007-05-31 01:30:22 +000086 TProcessor processor = null;
Aditya Agarwal5a429582007-02-06 02:51:15 +000087 TTransport inputTransport = null;
88 TTransport outputTransport = null;
89 TProtocol inputProtocol = null;
90 TProtocol outputProtocol = null;
Mark Slee83c52a82006-06-07 06:51:18 +000091 try {
92 client = serverTransport_.accept();
93 if (client != null) {
Mark Slee448849d2007-05-31 01:30:22 +000094 processor = processorFactory_.getProcessor(client);
Aditya Agarwal5a429582007-02-06 02:51:15 +000095 inputTransport = inputTransportFactory_.getTransport(client);
96 outputTransport = outputTransportFactory_.getTransport(client);
97 inputProtocol = inputProtocolFactory_.getProtocol(inputTransport);
98 outputProtocol = outputProtocolFactory_.getProtocol(outputTransport);
Mark Slee448849d2007-05-31 01:30:22 +000099 while (processor.process(inputProtocol, outputProtocol)) {}
Mark Slee83c52a82006-06-07 06:51:18 +0000100 }
Mark Sleeade2c832006-09-08 03:41:50 +0000101 } catch (TTransportException ttx) {
102 // Client died, just move on
Mark Slee83c52a82006-06-07 06:51:18 +0000103 } catch (TException tx) {
Mark Slee0502e612007-11-03 05:30:32 +0000104 if (!stopped_) {
105 tx.printStackTrace();
106 }
Mark Sleeade2c832006-09-08 03:41:50 +0000107 } catch (Exception x) {
Mark Slee0502e612007-11-03 05:30:32 +0000108 if (!stopped_) {
109 x.printStackTrace();
110 }
Mark Slee83c52a82006-06-07 06:51:18 +0000111 }
112
Aditya Agarwal5a429582007-02-06 02:51:15 +0000113 if (inputTransport != null) {
114 inputTransport.close();
Mark Slee83c52a82006-06-07 06:51:18 +0000115 }
Aditya Agarwal5a429582007-02-06 02:51:15 +0000116
117 if (outputTransport != null) {
118 outputTransport.close();
119 }
120
Mark Slee83c52a82006-06-07 06:51:18 +0000121 }
122 }
Mark Slee0502e612007-11-03 05:30:32 +0000123
124 public void stop() {
125 stopped_ = true;
126 serverTransport_.interrupt();
127 }
Mark Slee83c52a82006-06-07 06:51:18 +0000128}