| Index: pkg/mdns/lib/src/lookup_resolver.dart
|
| diff --git a/pkg/mdns/lib/src/lookup_resolver.dart b/pkg/mdns/lib/src/lookup_resolver.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..048069f1067800c6f203bc1f1e90b38f9f09022c
|
| --- /dev/null
|
| +++ b/pkg/mdns/lib/src/lookup_resolver.dart
|
| @@ -0,0 +1,46 @@
|
| +// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +library mdns.src.lookup_resolver;
|
| +
|
| +import 'dart:async';
|
| +import 'dart:collection';
|
| +
|
| +import 'package:mdns/src/packet.dart';
|
| +
|
| +class PendingRequest extends LinkedListEntry {
|
| + final String hostname;
|
| + final Completer completer;
|
| + PendingRequest(this.hostname, this.completer);
|
| +}
|
| +
|
| +/// Class for keeping track of pending lookups and process incoming
|
| +/// query responses.
|
| +///
|
| +/// Currently the responses are no cached.
|
| +class LookupResolver {
|
| + LinkedList pendingRequests = new LinkedList();
|
| +
|
| + Future addPendingRequest(String hostname, Duration timeout) {
|
| + var completer = new Completer();
|
| + var request = new PendingRequest(hostname, completer);
|
| + pendingRequests.add(request);
|
| + return completer.future.timeout(timeout, onTimeout: () {
|
| + request.unlink();
|
| + return null;
|
| + });
|
| + }
|
| +
|
| + void handleResponse(List<DecodeResult> response) {
|
| + for (var r in response) {
|
| + pendingRequests
|
| + .where((pendingRequest) => pendingRequest.hostname == r.name)
|
| + .forEach((pendingRequest) {
|
| + pendingRequest.completer.complete(r.address);
|
| + pendingRequest.unlink();
|
| + });
|
| + }
|
| + }
|
| +}
|
| +
|
|
|