Fixed race condition for posting messages. (#11)

Address #10
diff --git a/lib/client/sse_client.dart b/lib/client/sse_client.dart
index ab0b033..0ca8092 100644
--- a/lib/client/sse_client.dart
+++ b/lib/client/sse_client.dart
@@ -40,6 +40,7 @@
     _eventSource.addEventListener('message', _onIncomingMessage);
     _eventSource.addEventListener('control', _onIncomingControlMessage);
     _eventSource.onError.listen(_incomingController.addError);
+    _startPostingMessages();
   }
 
   Stream<Event> get onOpen => _eventSource.onOpen;
@@ -83,12 +84,21 @@
     close();
   }
 
+  final _messages = StreamController<dynamic>();
+
   void _onOutgoingMessage(dynamic message) async {
-    var encoded = jsonEncode(message);
-    try {
-      await _client.post(_serverUrl, body: encoded);
-    } catch (e) {
-      _logger.warning('Unable to encode outgoing message: $e');
+    _messages.add(message);
+  }
+
+  void _startPostingMessages() async {
+    await for (var message in _messages.stream) {
+      try {
+        await _client.post(_serverUrl, body: jsonEncode(message));
+      } on JsonUnsupportedObjectError catch (e) {
+        _logger.warning('Unable to encode outgoing message: $e');
+      } on ArgumentError catch (e) {
+        _logger.warning('Invalid argument: $e');
+      }
     }
   }
 }