Skip to content

Commit ecf59e2

Browse files
committed
Use async/await in a bunch more places
1 parent c716504 commit ecf59e2

File tree

3 files changed

+61
-67
lines changed

3 files changed

+61
-67
lines changed

lib/src/buffered_socket.dart

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -62,22 +62,22 @@ class BufferedSocket {
6262
DoneHandler onDone,
6363
ErrorHandler onError,
6464
SocketFactory socketFactory,
65-
OnConnection onConnection}) {
66-
var c = new Completer<BufferedSocket>();
67-
var future;
68-
if (socketFactory != null) {
69-
future = socketFactory(host, port);
70-
} else {
71-
future = RawSocket.connect(host, port);
65+
OnConnection onConnection}) async {
66+
try {
67+
var socket;
68+
if (socketFactory != null) {
69+
socket = await socketFactory(host, port);
70+
} else {
71+
socket = await RawSocket.connect(host, port);
72+
}
73+
var bufferedSocket = new BufferedSocket._(socket, onDataReady, onDone, onError);
74+
if (onConnection != null) {
75+
onConnection(bufferedSocket);
76+
}
77+
return bufferedSocket;
78+
} catch (e) {
79+
onError(e);
7280
}
73-
future.then((socket) {
74-
var bufferedSocket = new BufferedSocket._(socket, onDataReady, onDone, onError);
75-
if (onConnection != null) {
76-
onConnection(bufferedSocket);
77-
}
78-
return c.complete(bufferedSocket);
79-
}, onError: onError);
80-
return c.future;
8181
}
8282

8383
void _onData(RawSocketEvent event) {
@@ -188,16 +188,15 @@ class BufferedSocket {
188188
_closed = true;
189189
}
190190

191-
Future startSSL() {
191+
Future startSSL() async {
192192
log.fine("Securing socket");
193-
return RawSecureSocket.secure(_socket, subscription: _subscription,
194-
onBadCertificate: (cert) => true).then((socket) {
195-
log.fine("Socket is secure");
196-
_socket = socket;
197-
_subscription = _socket.listen(_onData, onError: _onSocketError,
198-
onDone: _onSocketDone, cancelOnError: true);
199-
_socket.writeEventsEnabled = true;
200-
_socket.readEventsEnabled = true;
201-
});
193+
var socket = await RawSecureSocket.secure(_socket, subscription: _subscription,
194+
onBadCertificate: (cert) => true);
195+
log.fine("Socket is secure");
196+
_socket = socket;
197+
_subscription = _socket.listen(_onData, onError: _onSocketError,
198+
onDone: _onSocketDone, cancelOnError: true);
199+
_socket.writeEventsEnabled = true;
200+
_socket.readEventsEnabled = true;
202201
}
203202
}

lib/src/connection.dart

Lines changed: 36 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ class _Connection {
8888
* is succesful.
8989
*/
9090
Future connect({String host, int port, String user,
91-
String password, String db, bool useCompression, bool useSSL}) {
91+
String password, String db, bool useCompression, bool useSSL}) async {
9292
if (_socket != null) {
9393
throw new MySqlClientError._("Cannot connect to server while a connection is already open");
9494
}
@@ -120,10 +120,8 @@ class _Connection {
120120
//TODO Only useDatabase if connection actually ended up as an SSL connection?
121121
//TODO On the other hand, it doesn't hurt to call useDatabase anyway.
122122
if (useSSL) {
123-
return _completer.future
124-
.then((_) {
125-
return _useDatabase(db);
126-
});
123+
await _completer.future;
124+
return _useDatabase(db);
127125
} else {
128126
return _completer.future;
129127
}
@@ -134,24 +132,27 @@ class _Connection {
134132
return processHandler(handler);
135133
}
136134

137-
void _readPacket() {
135+
_readPacket() async {
138136
log.fine("readPacket readyForHeader=${_readyForHeader}");
139137
if (_readyForHeader) {
140138
_readyForHeader = false;
141-
_socket.readBuffer(_headerBuffer).then(_handleHeader);
139+
await _socket.readBuffer(_headerBuffer);
140+
_handleHeader(_headerBuffer);
142141
}
143142
}
144143

145-
void _handleHeader(buffer) {
144+
_handleHeader(buffer) async {
146145
_dataSize = buffer[0] + (buffer[1] << 8) + (buffer[2] << 16);
147146
_packetNumber = buffer[3];
148147
log.fine("about to read $_dataSize bytes for packet ${_packetNumber}");
149148
_dataBuffer = new Buffer(_dataSize);
150149
log.fine("buffer size=${_dataBuffer.length}");
151150
if (_dataSize == 0xffffff || _largePacketBuffers.length > 0) {
152-
_socket.readBuffer(_dataBuffer).then(_handleMoreData);
151+
await _socket.readBuffer(_dataBuffer);
152+
_handleMoreData(_dataBuffer);
153153
} else {
154-
_socket.readBuffer(_dataBuffer).then(_dataHandler);
154+
await _socket.readBuffer(_dataBuffer);
155+
_dataHandler(_dataBuffer);
155156
}
156157
}
157158

@@ -176,7 +177,7 @@ class _Connection {
176177
}
177178
}
178179

179-
void _handleData(buffer) {
180+
_handleData(buffer) async {
180181
_readyForHeader = true;
181182
//log.fine("read all data: ${_dataBuffer._list}");
182183
//log.fine("read all data: ${Buffer.listChars(_dataBuffer._list)}");
@@ -191,19 +192,16 @@ class _Connection {
191192
if (response.nextHandler != null) {
192193
// if handler.processResponse() returned a Handler, pass control to that handler now
193194
_handler = response.nextHandler;
194-
_sendBuffer(_handler.createRequest()).then((_) {
195-
if (_useSSL && _handler is _SSLHandler) {
196-
log.fine("Use SSL");
197-
_socket.startSSL().then((_) {
198-
_secure = true;
199-
_handler = (_handler as _SSLHandler).nextHandler;
200-
_sendBuffer(_handler.createRequest()).then((_) {
201-
log.fine("Sent buffer");
202-
});
203-
});
204-
return;
205-
}
206-
});
195+
await _sendBuffer(_handler.createRequest());
196+
if (_useSSL && _handler is _SSLHandler) {
197+
log.fine("Use SSL");
198+
await _socket.startSSL();
199+
_secure = true;
200+
_handler = (_handler as _SSLHandler).nextHandler;
201+
await _sendBuffer(_handler.createRequest());
202+
log.fine("Sent buffer");
203+
return;
204+
}
207205
}
208206
if (response.finished) {
209207
_finishAndReuse();
@@ -264,24 +262,22 @@ class _Connection {
264262
}
265263
}
266264

267-
Future<Buffer> _sendBufferPart(Buffer buffer, int start) {
265+
Future<Buffer> _sendBufferPart(Buffer buffer, int start) async {
268266
var len = math.min(buffer.length - start, 0xFFFFFF);
269267

270268
_headerBuffer[0] = len & 0xFF;
271269
_headerBuffer[1] = (len & 0xFF00) >> 8;
272270
_headerBuffer[2] = (len & 0xFF0000) >> 16;
273271
_headerBuffer[3] = ++_packetNumber;
274272
log.fine("sending header, packet $_packetNumber");
275-
return _socket.writeBuffer(_headerBuffer).then((_) {
276-
log.fine("sendBuffer body, buffer length=${buffer.length}, start=$start, len=$len");
277-
return _socket.writeBufferPart(buffer, start, len);
278-
}).then((_) {
279-
if (len == 0xFFFFFF) {
280-
return _sendBufferPart(buffer, start + len);
281-
} else {
282-
return buffer;
283-
}
284-
});
273+
await _socket.writeBuffer(_headerBuffer);
274+
log.fine("sendBuffer body, buffer length=${buffer.length}, start=$start, len=$len");
275+
await _socket.writeBufferPart(buffer, start, len);
276+
if (len == 0xFFFFFF) {
277+
return _sendBufferPart(buffer, start + len);
278+
} else {
279+
return buffer;
280+
}
285281
}
286282

287283
/**
@@ -290,7 +286,7 @@ class _Connection {
290286
*
291287
* Returns a future
292288
*/
293-
Future<dynamic> processHandler(_Handler handler, {bool noResponse:false}) {
289+
Future<dynamic> processHandler(_Handler handler, {bool noResponse:false}) async {
294290
if (_handler != null) {
295291
throw new MySqlClientError._("Connection #$number cannot process a request for $handler while a request is already in progress for $_handler");
296292
}
@@ -300,11 +296,10 @@ class _Connection {
300296
if (!noResponse) {
301297
_handler = handler;
302298
}
303-
_sendBuffer(handler.createRequest()).then((_) {
304-
if (noResponse) {
305-
_finishAndReuse();
306-
}
307-
});
299+
await _sendBuffer(handler.createRequest());
300+
if (noResponse) {
301+
_finishAndReuse();
302+
}
308303
return _completer.future;
309304
}
310305

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ author: James Ots <[email protected]>
44
description: A MySQL connector
55
homepage: https://github.com/jamesots/sqljocky
66
environment:
7-
sdk: '>=0.8.10+6 <2.0.0'
7+
sdk: '>=0.11.0 <2.0.0'
88
documentation: http://jamesots.github.io/sqljocky/docs
99
dependencies:
1010
crypto: '>=0.9.0 <0.10.0'

0 commit comments

Comments
 (0)