diff options
author | Jens Geyer <jensg@apache.org> | 2014-11-11 01:30:02 +0100 |
---|---|---|
committer | Jens Geyer <jensg@apache.org> | 2014-11-11 01:35:21 +0100 |
commit | 65e9bde0ede772c9148e33ccc9be7f92eeeb9638 (patch) | |
tree | c9d527b642863e741b6a19706d6ae2c290ae38b9 /lib/haxe/src/org/apache | |
parent | 6794c624854e86fa9b73f36cac70b583a3629d02 (diff) | |
download | thrift-65e9bde0ede772c9148e33ccc9be7f92eeeb9638.tar.gz |
THRIFT-2813 multiple haxe library fixes/improvements
Client: Haxe
Patch: Jens Geyer
This closes #260
Diffstat (limited to 'lib/haxe/src/org/apache')
5 files changed, 65 insertions, 39 deletions
diff --git a/lib/haxe/src/org/apache/thrift/server/TServer.hx b/lib/haxe/src/org/apache/thrift/server/TServer.hx index e689b327b..56eee0add 100644 --- a/lib/haxe/src/org/apache/thrift/server/TServer.hx +++ b/lib/haxe/src/org/apache/thrift/server/TServer.hx @@ -38,7 +38,7 @@ class TServer // Log delegation private var _logDelegate : Dynamic->Void = null; - public var logDelegate(default,set) : Dynamic->Void; + public var logDelegate(get,set) : Dynamic->Void; public function new( processor : TProcessor, serverTransport : TServerTransport, @@ -87,6 +87,11 @@ class TServer } + private function get_logDelegate() : Dynamic->Void { + return _logDelegate; + } + + private function DefaultLogDelegate(value : Dynamic) : Void { trace( value); } diff --git a/lib/haxe/src/org/apache/thrift/server/TSimpleServer.hx b/lib/haxe/src/org/apache/thrift/server/TSimpleServer.hx index cb7cbd643..f3408e272 100644 --- a/lib/haxe/src/org/apache/thrift/server/TSimpleServer.hx +++ b/lib/haxe/src/org/apache/thrift/server/TSimpleServer.hx @@ -33,15 +33,14 @@ class TSimpleServer extends TServer { serverTransport : TServerTransport, transportFactory : TTransportFactory = null, protocolFactory : TProtocolFactory = null, - logDelegate : Dynamic->Void = null) { + logger : Dynamic->Void = null) { super( processor, serverTransport, transportFactory, transportFactory, protocolFactory, protocolFactory, - logDelegate); + logger); } - public override function Serve() : Void { try @@ -102,12 +101,15 @@ class TSimpleServer extends TServer { } catch( ttx : TTransportException) { - // Usually a client disconnect, expected + // Usually a client disconnect, expected + } + catch( pex : TProtocolException) + { + logDelegate(pex); // Unexpected } catch( e : Dynamic) { - // Unexpected - logDelegate(e); + logDelegate(e); // Unexpected } // Fire deleteContext server event after client disconnects diff --git a/lib/haxe/src/org/apache/thrift/transport/TFramedTransport.hx b/lib/haxe/src/org/apache/thrift/transport/TFramedTransport.hx index 5f0168a54..cef82ef61 100644 --- a/lib/haxe/src/org/apache/thrift/transport/TFramedTransport.hx +++ b/lib/haxe/src/org/apache/thrift/transport/TFramedTransport.hx @@ -21,6 +21,7 @@ package org.apache.thrift.transport; import org.apache.thrift.transport.*; +import haxe.io.Eof; import haxe.io.Bytes; import haxe.io.BytesBuffer; import haxe.io.BytesOutput; @@ -73,31 +74,41 @@ class TFramedTransport extends TTransport } public override function read(buf : BytesBuffer, off : Int, len : Int) : Int { - var data = Bytes.alloc(len); - - if (readBuffer_ != null) { - var got : Int = readBuffer_.readBytes(data, off, len); - if (got > 0) { - buf.addBytes(data,0,got); - return got; + try { + var data = Bytes.alloc(len); + + if ((readBuffer_ != null) && (readBuffer_.position < readBuffer_.length)) { + var got : Int = readBuffer_.readBytes(data, off, len); + if (got > 0) { + buf.addBytes(data,0,got); + return got; + }; }; - }; - // Read another frame of data - readFrame(); + // Read another frame of data + readFrame(); - var got = readBuffer_.readBytes(data, off, len); - buf.addBytes(data,0,got); - return got; + var got = readBuffer_.readBytes(data, off, len); + buf.addBytes(data,0,got); + return got; + } + catch (eof : Eof) { + throw new TTransportException(TTransportException.END_OF_FILE, 'Can\'t read $len bytes!'); + } } function readFrameSize() : Int { - var buffer = new BytesBuffer(); - var len = transport_.readAll( buffer, 0, 4); - var inp = new BytesInput( buffer.getBytes(), 0, 4); - inp.bigEndian = true; - return inp.readInt32(); + try { + var buffer = new BytesBuffer(); + var len = transport_.readAll( buffer, 0, 4); + var inp = new BytesInput( buffer.getBytes(), 0, 4); + inp.bigEndian = true; + return inp.readInt32(); + } + catch(eof : Eof) { + throw new TTransportException(TTransportException.END_OF_FILE, 'Can\'t read 4 bytes!'); + } } @@ -111,10 +122,15 @@ class TFramedTransport extends TTransport throw new TTransportException(TTransportException.UNKNOWN, 'Frame size ($size) larger than max length ($maxLength_)!'); }; - var buffer = new BytesBuffer(); - size = transport_.readAll( buffer, 0, size); - readBuffer_ = new BytesInput( buffer.getBytes(), 0, size); - readBuffer_.bigEndian = true; + try { + var buffer = new BytesBuffer(); + size = transport_.readAll( buffer, 0, size); + readBuffer_ = new BytesInput( buffer.getBytes(), 0, size); + readBuffer_.bigEndian = true; + } + catch(eof : Eof) { + throw new TTransportException(TTransportException.END_OF_FILE, 'Can\'t read $size bytes!'); + } } public override function write(buf : Bytes, off : Int, len : Int) : Void { @@ -135,7 +151,7 @@ class TFramedTransport extends TTransport writeFrameSize(len); transport_.write(buf, 0, len); - transport_.flush(); + transport_.flush(callback); } } diff --git a/lib/haxe/src/org/apache/thrift/transport/TServerSocket.hx b/lib/haxe/src/org/apache/thrift/transport/TServerSocket.hx index f38b58459..586a8b6bf 100644 --- a/lib/haxe/src/org/apache/thrift/transport/TServerSocket.hx +++ b/lib/haxe/src/org/apache/thrift/transport/TServerSocket.hx @@ -43,13 +43,13 @@ class TServerSocket extends TServerTransport { private var _port : Int = 0; // Timeout for client sockets from accept - private var _clientTimeout : Int = 0; + private var _clientTimeout : Float = 0; // Whether or not to wrap new TSocket connections in buffers private var _useBufferedSockets : Bool = false; - public function new( port : Int, clientTimeout : Int = 0, useBufferedSockets : Bool = false) + public function new( port : Int, clientTimeout : Float = 0, useBufferedSockets : Bool = false) { _port = port; _clientTimeout = clientTimeout; diff --git a/lib/haxe/src/org/apache/thrift/transport/TSocket.hx b/lib/haxe/src/org/apache/thrift/transport/TSocket.hx index 9d5e2dc39..b6f2119bf 100644 --- a/lib/haxe/src/org/apache/thrift/transport/TSocket.hx +++ b/lib/haxe/src/org/apache/thrift/transport/TSocket.hx @@ -83,6 +83,7 @@ class TSocket extends TTransport { #else this.host = new Host(host); #end + this.port = port; } @@ -143,7 +144,7 @@ class TSocket extends TTransport { #else - socket.waitForRead(); + //socket.waitForRead(); - no, this ignores timeout and blocks infinitely if(readCount < off) { input.read(off-readCount); readCount = off; @@ -208,7 +209,6 @@ class TSocket extends TTransport { } var bytes = outbuf.buffer; - #else var bytes = obuffer.getBytes(); @@ -222,11 +222,13 @@ class TSocket extends TTransport { ioCallback = callback; try { readCount = 0; + #if js output.send( bytes); #else output.writeBytes( bytes, 0, bytes.length); #end + if(ioCallback != null) { ioCallback(null); // success call } @@ -260,15 +262,14 @@ class TSocket extends TTransport { } #elseif flash - var socket = new Socket(); socket.connect(host, port); #else - var socket = new Socket(); socket.setBlocking(true); socket.setFastSend(true); + socket.setTimeout(5.0); socket.connect(host, port); #end @@ -286,10 +287,12 @@ class TSocket extends TTransport { #if (flash || js) output = socket; - input = socket; + input = socket; + #else - output = socket.output; - input = socket.input; + output = socket.output; + input = socket.input; + #end } |