gorealis v2 refactor (#5)

* Changing default timeout for start maintenance.

* Upgrading dependencies to gorealis v2 and thrift  0.12.0

* Refactored to update to gorealis v2.
This commit is contained in:
Renan DelValle 2018-12-27 11:31:51 -08:00 committed by GitHub
parent ad4dd9606e
commit 6ab5c9334d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
1335 changed files with 137431 additions and 61530 deletions

View file

@ -25,7 +25,14 @@ class TFramedTransport extends TBufferedTransport {
final TTransport _transport;
final Uint8List headerBytes = new Uint8List(headerByteCount);
final Uint8List _headerBytes = new Uint8List(headerByteCount);
int _receivedHeaderBytes = 0;
int _bodySize = 0;
Uint8List _body = null;
int _receivedBodyBytes = 0;
Completer<Uint8List> _frameCompleter = null;
TFramedTransport(TTransport transport) : _transport = transport {
if (transport == null) {
@ -51,33 +58,112 @@ class TFramedTransport extends TBufferedTransport {
if (got > 0) return got;
}
_readFrame();
// IMPORTANT: by the time you've got here,
// an entire frame is available for reading
return super.read(buffer, offset, length);
}
void _readFrame() {
_transport.readAll(headerBytes, 0, headerByteCount);
int size = headerBytes.buffer.asByteData().getUint32(0);
if (size < 0) {
throw new TTransportError(
TTransportErrorType.UNKNOWN, "Read a negative frame size: $size");
if (_body == null) {
bool gotFullHeader = _readFrameHeader();
if (!gotFullHeader) {
return;
}
}
Uint8List buffer = new Uint8List(size);
_transport.readAll(buffer, 0, size);
_setReadBuffer(buffer);
_readFrameBody();
}
bool _readFrameHeader() {
var remainingHeaderBytes = headerByteCount - _receivedHeaderBytes;
int got = _transport.read(_headerBytes, _receivedHeaderBytes, remainingHeaderBytes);
if (got < 0) {
throw new TTransportError(
TTransportErrorType.UNKNOWN, "Socket closed during frame header read");
}
_receivedHeaderBytes += got;
if (_receivedHeaderBytes == headerByteCount) {
int size = _headerBytes.buffer.asByteData().getUint32(0);
_receivedHeaderBytes = 0;
if (size < 0) {
throw new TTransportError(
TTransportErrorType.UNKNOWN, "Read a negative frame size: $size");
}
_bodySize = size;
_body = new Uint8List(_bodySize);
_receivedBodyBytes = 0;
return true;
} else {
_registerForReadableBytes();
return false;
}
}
void _readFrameBody() {
var remainingBodyBytes = _bodySize - _receivedBodyBytes;
int got = _transport.read(_body, _receivedBodyBytes, remainingBodyBytes);
if (got < 0) {
throw new TTransportError(
TTransportErrorType.UNKNOWN, "Socket closed during frame body read");
}
_receivedBodyBytes += got;
if (_receivedBodyBytes == _bodySize) {
var body = _body;
_bodySize = 0;
_body = null;
_receivedBodyBytes = 0;
_setReadBuffer(body);
var completer = _frameCompleter;
_frameCompleter = null;
completer.complete(new Uint8List(0));
} else {
_registerForReadableBytes();
}
}
Future flush() {
Uint8List buffer = consumeWriteBuffer();
int length = buffer.length;
if (_frameCompleter == null) {
Uint8List buffer = consumeWriteBuffer();
int length = buffer.length;
headerBytes.buffer.asByteData().setUint32(0, length);
_transport.write(headerBytes, 0, headerByteCount);
_transport.write(buffer, 0, length);
_headerBytes.buffer.asByteData().setUint32(0, length);
_transport.write(_headerBytes, 0, headerByteCount);
_transport.write(buffer, 0, length);
return _transport.flush();
_frameCompleter = new Completer<Uint8List>();
_registerForReadableBytes();
}
return _frameCompleter.future;
}
void _registerForReadableBytes() {
_transport.flush().then((_) {
_readFrame();
}).catchError((e) {
var completer = _frameCompleter;
_receivedHeaderBytes = 0;
_bodySize = 0;
_body = null;
_receivedBodyBytes = 0;
_frameCompleter = null;
completer.completeError(e);
});
}
}

View file

@ -79,7 +79,9 @@ class TClientSocketTransport extends TSocketTransport {
var completer = new Completer<Uint8List>.sync();
_completers.add(completer);
socket.send(bytes);
if (bytes.lengthInBytes > 0) {
socket.send(bytes);
}
return completer.future;
}