Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(700)

Unified Diff: pkg/fletchc/lib/src/driver/developer.dart

Issue 1422853009: Add mDNS discovery to the Fletch compiler (Closed) Base URL: git@github.com:dart-lang/fletch.git@master
Patch Set: Fixed warning in test Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/fletchc/.packages ('k') | pkg/fletchc/lib/src/verbs/actions.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/fletchc/lib/src/driver/developer.dart
diff --git a/pkg/fletchc/lib/src/driver/developer.dart b/pkg/fletchc/lib/src/driver/developer.dart
index 572547bdf0657ec44f57c52e2bd798ff4560d21e..50b2d5e7e63a743bf2f5a7b92ed7b3bfd15aa9ec 100644
--- a/pkg/fletchc/lib/src/driver/developer.dart
+++ b/pkg/fletchc/lib/src/driver/developer.dart
@@ -32,6 +32,11 @@ import 'package:fletch_agent/messages.dart' show
AGENT_DEFAULT_PORT,
MessageDecodeException;
+import 'package:mdns/mdns.dart' show
+ MDnsClient,
+ ResourceRecord,
+ RRType;
+
import '../../commands.dart' show
CommandCode,
HandShakeResult,
@@ -334,8 +339,10 @@ Future<Settings> createSettings(
Future<Address> readAddressFromUser(
CommandSender commandSender,
StreamIterator<Command> commandIterator) async {
+ String message =
+ "Please enter IP address of remote device (press enter for discovery): ";
commandSender.sendEventLoopStarted();
- commandSender.sendStdout("Please enter IP address of remote device: ");
+ commandSender.sendStdout(message);
while (await commandIterator.moveNext()) {
Command command = commandIterator.current;
switch (command.code) {
@@ -350,7 +357,13 @@ Future<Address> readAddressFromUser(
// session because we use canonical input processing (Unix line
// buffering), but it doesn't work in general. So we should fix that.
String line = UTF8.decode(command.data).trim();
- return parseAddress(line, defaultPort: AGENT_DEFAULT_PORT);
+ if (line.isEmpty) {
+ await discoverDevices();
+ commandSender.sendStdout(message);
+ } else {
+ return parseAddress(line, defaultPort: AGENT_DEFAULT_PORT);
+ }
+ break;
case DriverCommand.Signal:
// Send an empty line as the user didn't hit enter.
@@ -750,6 +763,26 @@ Future<int> invokeCombinedTasks(
return task2(commandSender, commandIterator);
}
+Future discoverDevices() async {
+ print('Looking for Fletch capable devices...');
+ MDnsClient client = new MDnsClient();
+ await client.start();
+ String name = '_fletch_agent._tcp.local';
+ await for (ResourceRecord ptr in client.lookup(RRType.PTR, name)) {
+ String domain = ptr.domainName;
+ await for (ResourceRecord srv in client.lookup(RRType.SRV, domain)) {
+ String target = srv.target;
+ await for (ResourceRecord a in client.lookup(RRType.A, target)) {
+ InternetAddress address = a.address;
+ if (!address.isLinkLocal) {
+ print('Found device $target on address ${address.address}.');
+ }
+ }
+ }
+ }
+ client.stop();
+}
+
Address parseAddress(String address, {int defaultPort: 0}) {
String host;
int port;
« no previous file with comments | « pkg/fletchc/.packages ('k') | pkg/fletchc/lib/src/verbs/actions.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698