Deprecate onConnect (#36)

* Replace onOpen with onConnect

* buffer messages

* actually buffer
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 80694bb..a03a6c6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+## 3.7.0
+
+- Deprecate the client's `onOpen` getter. Messages will now be buffered until
+  a connection is established.
+
 ## 3.6.1
 
 - Drop dependency on `package:uuid`.
diff --git a/lib/client/sse_client.dart b/lib/client/sse_client.dart
index 11327fd..4686fa0 100644
--- a/lib/client/sse_client.dart
+++ b/lib/client/sse_client.dart
@@ -37,10 +37,11 @@
     _eventSource =
         EventSource('$serverUrl?sseClientId=$clientId', withCredentials: true);
     _serverUrl = '$serverUrl?sseClientId=$clientId';
-    _outgoingController.stream
-        .listen(_onOutgoingMessage, onDone: _onOutgoingDone);
+    _eventSource.onOpen.first.whenComplete(() => _outgoingController.stream
+        .listen(_onOutgoingMessage, onDone: _onOutgoingDone));
     _eventSource.addEventListener('message', _onIncomingMessage);
     _eventSource.addEventListener('control', _onIncomingControlMessage);
+
     _eventSource.onOpen.listen((_) {
       _errorTimer?.cancel();
     });
@@ -56,6 +57,9 @@
     });
   }
 
+  @Deprecated(
+      'Outgoing messages are now buffered until a connection is established.'
+      'This should no longer be required and will be removed.')
   Stream<Event> get onOpen => _eventSource.onOpen;
 
   /// Add messages to this [StreamSink] to send them to the server.
diff --git a/pubspec.yaml b/pubspec.yaml
index 63c362d..b2b8b3f 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: sse
-version: 3.6.1
+version: 3.7.0
 homepage: https://github.com/dart-lang/sse
 description: >-
   Provides client and server functionality for setting up bi-directional