| // Copyright 2018 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'dart:convert'; |
| |
| import 'package:fidl_fuchsia_mem/fidl.dart' as fuchsia_mem; |
| import 'package:fidl_fuchsia_modular/fidl.dart'; |
| import 'package:meta/meta.dart'; |
| import 'package:zircon/zircon.dart'; |
| |
| /// Handler for when [LinkWatcher#notify] is called by the framework. |
| typedef LinkWatcherNotifyCallback = void Function(String data); |
| |
| /// Implements [LinkWatcher] for receiving update notifications from a [Link]. |
| class LinkWatcherImpl extends LinkWatcher { |
| /// Called when [LinkWatcher.notify] is called. |
| final LinkWatcherNotifyCallback onNotify; |
| |
| /// Creates a new instance of [LinkWatcherImpl]. |
| LinkWatcherImpl({ |
| @required this.onNotify, |
| }) : assert(onNotify != null); |
| |
| @override |
| void notify(fuchsia_mem.Buffer buffer) { |
| var dataVmo = SizedVmo(buffer.vmo.handle, buffer.size); |
| var data = dataVmo.read(buffer.size); |
| dataVmo.close(); |
| onNotify(utf8.decode(data.bytesAsUint8List())); |
| } |
| } |