| // Copyright 2017 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:async'; |
| import 'dart:convert' show utf8; |
| import 'dart:typed_data'; |
| |
| import 'package:fidl/fidl.dart'; |
| import 'package:fidl_fuchsia_mem/fidl_async.dart' as fuchsia_mem; |
| import 'package:fidl_fuchsia_modular/fidl_async.dart'; |
| import 'package:zircon/zircon.dart'; |
| |
| /// Wrapper class for the async fuchsia.modular.MessageSender FIDL interface. |
| /// This class provides a more convenient interface for sending messages. |
| /// TODO: Rename to MessageSenderClient once all relevant code switched to |
| /// the async fidl bindings. |
| class MessageSenderClientAsync { |
| MessageSenderProxy _messageSenderProxy; |
| |
| /// The supplied error callback is called when the token or message queue |
| /// no longer exists, or if the token is invalid. |
| MessageSenderClientAsync(); |
| |
| /// Will encode the given [message] as utf8 before sending the bytes over. |
| /// TODO(MI4-1106): In the future there will be error handling in case |
| /// [sendString] fails. |
| Future<void> sendString(String message) { |
| return sendUint8List(Uint8List.fromList(utf8.encode(message))); |
| } |
| |
| /// Send the given [message]. |
| Future<void> sendUint8List(Uint8List message) { |
| return _messageSenderProxy.send(fuchsia_mem.Buffer( |
| vmo: SizedVmo.fromUint8List(message), |
| size: message.length, |
| )); |
| } |
| |
| /// Close the underlying MessageSenderProxy. |
| void close() { |
| _messageSenderProxy?.ctrl?.close(); |
| } |
| |
| /// Binds a new MessageSenderProxy to this class and returns the request-side. |
| /// Closes the previously bound proxy if one exists. |
| InterfaceRequest<MessageSender> newRequest() { |
| if (_messageSenderProxy != null && _messageSenderProxy.ctrl.isBound) { |
| _messageSenderProxy.ctrl.close(); |
| } |
| |
| _messageSenderProxy = MessageSenderProxy(); |
| return _messageSenderProxy.ctrl.request(); |
| } |
| } |