Skip to content

Commit fc168d5

Browse files
author
Pi Songkuntham
authored
Fixed race condition for posting messages. (flutter#11)
Address flutter#10
1 parent 20567a4 commit fc168d5

File tree

1 file changed

+15
-5
lines changed

1 file changed

+15
-5
lines changed

lib/client/sse_client.dart

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ class SseClient extends StreamChannelMixin<String> {
4040
_eventSource.addEventListener('message', _onIncomingMessage);
4141
_eventSource.addEventListener('control', _onIncomingControlMessage);
4242
_eventSource.onError.listen(_incomingController.addError);
43+
_startPostingMessages();
4344
}
4445

4546
Stream<Event> get onOpen => _eventSource.onOpen;
@@ -83,12 +84,21 @@ class SseClient extends StreamChannelMixin<String> {
8384
close();
8485
}
8586

87+
final _messages = StreamController<dynamic>();
88+
8689
void _onOutgoingMessage(dynamic message) async {
87-
var encoded = jsonEncode(message);
88-
try {
89-
await _client.post(_serverUrl, body: encoded);
90-
} catch (e) {
91-
_logger.warning('Unable to encode outgoing message: $e');
90+
_messages.add(message);
91+
}
92+
93+
void _startPostingMessages() async {
94+
await for (var message in _messages.stream) {
95+
try {
96+
await _client.post(_serverUrl, body: jsonEncode(message));
97+
} on JsonUnsupportedObjectError catch (e) {
98+
_logger.warning('Unable to encode outgoing message: $e');
99+
} on ArgumentError catch (e) {
100+
_logger.warning('Invalid argument: $e');
101+
}
92102
}
93103
}
94104
}

0 commit comments

Comments
 (0)