diff --git a/packages/flutter_tools/lib/src/commands/daemon.dart b/packages/flutter_tools/lib/src/commands/daemon.dart index 21373f93352..6cdb2aa267c 100644 --- a/packages/flutter_tools/lib/src/commands/daemon.dart +++ b/packages/flutter_tools/lib/src/commands/daemon.dart @@ -28,7 +28,7 @@ import '../runner/flutter_command.dart'; import '../tester/flutter_tester.dart'; import '../vmservice.dart'; -const String protocolVersion = '0.2.0'; +const String protocolVersion = '0.3.0'; /// A server process command. This command will start up a long-lived server. /// It reads JSON-RPC based commands from stdin, executes them, and returns @@ -242,6 +242,14 @@ class DaemonDomain extends Domain { registerHandler('version', version); registerHandler('shutdown', shutdown); + sendEvent( + 'daemon.connected', + { + 'version': protocolVersion, + 'pid': pid, + }, + ); + _subscription = daemon.notifyingLogger.onMessage.listen((LogMessage message) { if (daemon.logToStdout) { if (message.level == 'status') { diff --git a/packages/flutter_tools/test/commands/daemon_test.dart b/packages/flutter_tools/test/commands/daemon_test.dart index 6389c0d79a8..1a8a45ee6fe 100644 --- a/packages/flutter_tools/test/commands/daemon_test.dart +++ b/packages/flutter_tools/test/commands/daemon_test.dart @@ -209,7 +209,8 @@ void main() { notifyingLogger: notifyingLogger, ); - final Map response = await responses.stream.first; + final Map response = + await responses.stream.skipWhile(_isConnectedEvent).first; expect(response['event'], 'daemon.showMessage'); expect(response['params'], isMap); expect(response['params'], containsPair('level', 'warning')); @@ -249,7 +250,7 @@ void main() { daemon.deviceDomain.addDeviceDiscoverer(discoverer); discoverer.addDevice(new MockAndroidDevice()); - return responses.stream.first.then((Map response) { + return responses.stream.skipWhile(_isConnectedEvent).first.then((Map response) { expect(response['event'], 'device.added'); expect(response['params'], isMap); @@ -322,6 +323,8 @@ void main() { bool _notEvent(Map map) => map['event'] == null; +bool _isConnectedEvent(Map map) => map['event'] == 'daemon.connected'; + class MockAndroidWorkflow extends AndroidWorkflow { MockAndroidWorkflow({ this.canListDevices: true });