kitejs
Version:
the rpc framework Kite for Node.js
49 lines (41 loc) • 1.37 kB
text/typescript
/**
* @author xiangshouding
* @file protocol/thrift.ts
*/
import {Map} from '../types/lang';
import {Address, Protocol} from './Protocol';
import * as thrift from 'thrift';
export class Thrift implements Protocol {
service: any;
addr: Address;
timeout: number;
transport: string;
public constructor(addr: Address, options?: Map<any>) {
this.service = options['service'];
this.timeout = options['timeout'];
this.transport = options['transport']
this.addr = addr;
}
public createConnection() {
let transport, protocol;
if (this.transport && this.transport === 'FRAMED') {
transport = thrift.TFramedTransport;
} else {
transport = thrift.TBufferedTransport;
}
protocol = thrift.TBinaryProtocol;
return thrift.createConnection(this.addr.getHost(), this.addr.getPort(), {
transport: transport,
protocol: protocol,
'connect_timeout': this.timeout
});
}
public request(cb) {
if (!this.service) {
return cb(new Error('invalid service or not given, please use .loadService(<path>) given it.'));
}
let con = this.createConnection();
con.on('error', cb);
return cb(null, thrift.createClient(this.service, con), con);
}
}