* Factory
*/
public static class Factory implements TProtocolFactory {
- public TProtocol[] getIOProtocols(TTransport in, TTransport out) {
- TProtocol[] io = new TProtocol[2];
- io[0] = io[1] = new TBinaryProtocol(in, out);
- return io;
+ public TProtocol getProtocol(TTransport trans) {
+ return new TBinaryProtocol(trans);
}
}
/**
* Constructor
*/
- public TBinaryProtocol(TTransport in, TTransport out) {
- super(in, out);
+ public TBinaryProtocol(TTransport trans) {
+ super(trans);
}
public void writeMessageBegin(TMessage message) throws TException {
private byte [] bout = new byte[1];
public void writeByte(byte b) throws TException {
bout[0] = b;
- outputTransport_.write(bout, 0, 1);
+ trans_.write(bout, 0, 1);
}
private byte[] i16out = new byte[2];
public void writeI16(short i16) throws TException {
i16out[0] = (byte)(0xff & (i16 >> 8));
i16out[1] = (byte)(0xff & (i16));
- outputTransport_.write(i16out, 0, 2);
+ trans_.write(i16out, 0, 2);
}
private byte[] i32out = new byte[4];
i32out[1] = (byte)(0xff & (i32 >> 16));
i32out[2] = (byte)(0xff & (i32 >> 8));
i32out[3] = (byte)(0xff & (i32));
- outputTransport_.write(i32out, 0, 4);
+ trans_.write(i32out, 0, 4);
}
private byte[] i64out = new byte[8];
i64out[5] = (byte)(0xff & (i64 >> 16));
i64out[6] = (byte)(0xff & (i64 >> 8));
i64out[7] = (byte)(0xff & (i64));
- outputTransport_.write(i64out, 0, 8);
+ trans_.write(i64out, 0, 8);
}
public void writeDouble(double dub) throws TException {
public void writeString(String str) throws TException {
byte[] dat = str.getBytes();
writeI32(dat.length);
- outputTransport_.write(dat, 0, dat.length);
+ trans_.write(dat, 0, dat.length);
}
/**
private byte[] bin = new byte[1];
public byte readByte() throws TException {
- inputTransport_.readAll(bin, 0, 1);
+ trans_.readAll(bin, 0, 1);
return bin[0];
}
private byte[] i16rd = new byte[2];
public short readI16() throws TException {
- inputTransport_.readAll(i16rd, 0, 2);
+ trans_.readAll(i16rd, 0, 2);
return
(short)
(((i16rd[0] & 0xff) << 8) |
private byte[] i32rd = new byte[4];
public int readI32() throws TException {
- inputTransport_.readAll(i32rd, 0, 4);
+ trans_.readAll(i32rd, 0, 4);
return
((i32rd[0] & 0xff) << 24) |
((i32rd[1] & 0xff) << 16) |
private byte[] i64rd = new byte[8];
public long readI64() throws TException {
- inputTransport_.readAll(i64rd, 0, 8);
+ trans_.readAll(i64rd, 0, 8);
return
((long)(i64rd[0] & 0xff) << 56) |
((long)(i64rd[1] & 0xff) << 48) |
public String readString() throws TException {
int size = readI32();
byte[] buf = new byte[size];
- inputTransport_.readAll(buf, 0, size);
+ trans_.readAll(buf, 0, size);
return new String(buf);
}
}
private TProtocol() {}
/**
- * Input transport
+ * Transport
*/
- protected TTransport inputTransport_;
-
- /**
- * Output transport
- */
- protected TTransport outputTransport_;
+ protected TTransport trans_;
/**
* Constructor
*/
- protected TProtocol(TTransport in, TTransport out) {
- inputTransport_ = in;
- outputTransport_ = out;
+ protected TProtocol(TTransport trans) {
+ trans_ = trans;
}
/**
- * Input accessor
- */
- public TTransport getInputTransport() {
- return inputTransport_;
- }
-
- /**
- * Output accessor
+ * Transport accessor
*/
- public TTransport getOutputTransport() {
- return outputTransport_;
+ public TTransport getTransport() {
+ return trans_;
}
/**
import com.facebook.thrift.transport.TTransport;
/**
- * Factory interface for constructing protocol encoder/decoder pair from an
- * input and output transport.
+ * Factory interface for constructing protocol instances.
*
* @author Mark Slee <mcslee@facebook.com>
+ * @author Aditya Agarwal <aditya@facebook.com>
*/
public interface TProtocolFactory {
- public TProtocol[] getIOProtocols(TTransport in, TTransport out);
+ public TProtocol getProtocol(TTransport trans);
}
protected TServerTransport serverTransport_;
/**
- * Transport Factory
+ * Input Transport Factory
*/
- protected TTransportFactory transportFactory_;
+ protected TTransportFactory inputTransportFactory_;
/**
- * Protocol Factory
+ * Output Transport Factory
*/
- protected TProtocolFactory protocolFactory_;
+ protected TTransportFactory outputTransportFactory_;
+
+ /**
+ * Input Protocol Factory
+ */
+ protected TProtocolFactory inputProtocolFactory_;
+
+ /**
+ * Output Protocol Factory
+ */
+ protected TProtocolFactory outputProtocolFactory_;
/**
* Default constructors.
protected TServer(TProcessor processor,
TServerTransport serverTransport) {
this(processor,
- serverTransport,
+ serverTransport,
new TTransportFactory(),
+ new TTransportFactory(),
+ new TBinaryProtocol.Factory(),
new TBinaryProtocol.Factory());
}
this(processor,
serverTransport,
transportFactory,
+ transportFactory,
+ new TBinaryProtocol.Factory(),
new TBinaryProtocol.Factory());
}
TServerTransport serverTransport,
TTransportFactory transportFactory,
TProtocolFactory protocolFactory) {
+ this(processor,
+ serverTransport,
+ transportFactory,
+ transportFactory,
+ protocolFactory,
+ protocolFactory);
+ }
+
+ protected TServer(TProcessor processor,
+ TServerTransport serverTransport,
+ TTransportFactory inputTransportFactory,
+ TTransportFactory outputTransportFactory,
+ TProtocolFactory inputProtocolFactory,
+ TProtocolFactory outputProtocolFactory) {
processor_ = processor;
serverTransport_ = serverTransport;
- transportFactory_ = transportFactory;
- protocolFactory_ = protocolFactory;
+ inputTransportFactory_ = inputTransportFactory;
+ outputTransportFactory_ = outputTransportFactory;
+ inputProtocolFactory_ = inputProtocolFactory;
+ outputProtocolFactory_ = outputProtocolFactory;
}
/**
import com.facebook.thrift.protocol.TProtocolFactory;
import com.facebook.thrift.transport.TServerTransport;
import com.facebook.thrift.transport.TTransport;
+import com.facebook.thrift.transport.TTransportFactory;
import com.facebook.thrift.transport.TTransportException;
/**
super(processor, serverTransport);
}
+ public TSimpleServer(TProcessor processor,
+ TServerTransport serverTransport,
+ TTransportFactory transportFactory,
+ TProtocolFactory protocolFactory) {
+ super(processor, serverTransport, transportFactory, protocolFactory);
+ }
+
+ public TSimpleServer(TProcessor processor,
+ TServerTransport serverTransport,
+ TTransportFactory inputTransportFactory,
+ TTransportFactory outputTransportFactory,
+ TProtocolFactory inputProtocolFactory,
+ TProtocolFactory outputProtocolFactory) {
+ super(processor, serverTransport,
+ inputTransportFactory, outputTransportFactory,
+ inputProtocolFactory, outputProtocolFactory);
+ }
+
public void serve() {
try {
serverTransport_.listen();
while (true) {
TTransport client = null;
- TTransport[] iot = null;
- TProtocol[] iop = null;
+ TTransport inputTransport = null;
+ TTransport outputTransport = null;
+ TProtocol inputProtocol = null;
+ TProtocol outputProtocol = null;
try {
client = serverTransport_.accept();
if (client != null) {
- iot = transportFactory_.getIOTransports(client);
- iop = protocolFactory_.getIOProtocols(iot[0], iot[1]);
- while (processor_.process(iop[0], iop[1]));
+ inputTransport = inputTransportFactory_.getTransport(client);
+ outputTransport = outputTransportFactory_.getTransport(client);
+ inputProtocol = inputProtocolFactory_.getProtocol(inputTransport);
+ outputProtocol = outputProtocolFactory_.getProtocol(outputTransport);
+ while (processor_.process(inputProtocol, outputProtocol)) {}
}
} catch (TTransportException ttx) {
// Client died, just move on
x.printStackTrace();
}
- if (iot != null) {
- if (iot[0] != null) {
- iot[0].close();
- }
- if (iot[1] != null) {
- iot[1].close();
- }
+ if (inputTransport != null) {
+ inputTransport.close();
}
+
+ if (outputTransport != null) {
+ outputTransport.close();
+ }
+
}
}
}
import com.facebook.thrift.TProcessor;
import com.facebook.thrift.protocol.TProtocol;
import com.facebook.thrift.protocol.TProtocolFactory;
+import com.facebook.thrift.protocol.TBinaryProtocol;
import com.facebook.thrift.transport.TServerTransport;
import com.facebook.thrift.transport.TTransport;
import com.facebook.thrift.transport.TTransportException;
public TThreadPoolServer(TProcessor processor,
TServerTransport serverTransport) {
- this(processor, serverTransport, new Options());
+ this(processor, serverTransport,
+ new TTransportFactory(), new TTransportFactory(),
+ new TBinaryProtocol.Factory(), new TBinaryProtocol.Factory(),
+ new Options());
+ }
+
+ public TThreadPoolServer(TProcessor processor,
+ TServerTransport serverTransport,
+ TTransportFactory transportFactory,
+ TProtocolFactory protocolFactory) {
+ this(processor, serverTransport,
+ transportFactory, transportFactory,
+ protocolFactory, protocolFactory,
+ new Options());
}
public TThreadPoolServer(TProcessor processor,
TServerTransport serverTransport,
+ TTransportFactory inputTransportFactory,
+ TTransportFactory outputTransportFactory,
+ TProtocolFactory inputProtocolFactory,
+ TProtocolFactory outputProtocolFactory,
Options options) {
- super(processor, serverTransport);
+ super(processor, serverTransport,
+ inputTransportFactory, outputTransportFactory,
+ inputProtocolFactory, outputProtocolFactory);
executorService_ = null;
* Loops on processing a client forever
*/
public void run() {
- TTransport[] iot = null;
- TProtocol[] iop = null;
+ TTransport inputTransport = null;
+ TTransport outputTransport = null;
+ TProtocol inputProtocol = null;
+ TProtocol outputProtocol = null;
try {
- iot = transportFactory_.getIOTransports(client_);
- iop = protocolFactory_.getIOProtocols(iot[0], iot[1]);
- while (processor_.process(iop[0], iop[1])) {}
+ inputTransport = inputTransportFactory_.getTransport(client_);
+ outputTransport = outputTransportFactory_.getTransport(client_);
+ inputProtocol = inputProtocolFactory_.getProtocol(inputTransport);
+ outputProtocol = outputProtocolFactory_.getProtocol(outputTransport);
+ while (processor_.process(inputProtocol, outputProtocol)) {}
} catch (TTransportException ttx) {
// Assume the client died and continue silently
} catch (TException tx) {
x.printStackTrace();
}
- if (iot != null) {
- if (iot[0] != null) {
- iot[0].close();
- }
- if (iot[1] != null) {
- iot[1].close();
- }
+ if (inputTransport != null) {
+ inputTransport.close();
+ }
+
+ if (outputTransport != null) {
+ outputTransport.close();
}
}
}
package com.facebook.thrift.transport;
/**
- * Factory class used to create an input and output transport out of a simple
- * transport. This is used primarily in servers, which get Transports from
- * a ServerTransport and then may want to mutate them.
+ * Factory class used to create wrapped instance of Transports.
+ * This is used primarily in servers, which get Transports from
+ * a ServerTransport and then may want to mutate them (i.e. create
+ * a BufferedTransport from the underlying base transport)
*
* @author Mark Slee <mcslee@facebook.com>
+ * @author Aditya Agarwal <aditya@facebook.com>
*/
public class TTransportFactory {
/**
- * Returns a list of two transports (input, output) from a simple
- * Transport.
+ * Return a wrapped instance of the base Transport.
*
* @param in The base transport
- * @returns Array of two transports, first for input, second for output
+ * @returns Wrapped Transport
*/
- public TTransport[] getIOTransports(TTransport in) {
- TTransport[] out = new TTransport[2];
- out[0] = out[1] = in;
- return out;
+ public TTransport getTransport(TTransport trans) {
+ return trans;
}
}