blob: c572b3efda74a94d54334b0777f6eda3518b9b5c [file] [log] [blame]
#!mojo mojo:dart_content_handler
// Copyright 2015 The Vanadium 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 'gen/dart-gen/mojom/lib/mojo/examples/echo.mojom.dart';
import 'package:v23proxy/client.dart' as v23proxy;
import 'package:mojo/application.dart';
import 'package:mojo/core.dart';
class Echo extends Application {
final RemoteEchoProxy echoProxy = new RemoteEchoProxy.unbound();
Echo.fromHandle(MojoHandle handle) : super.fromHandle(handle);
void initialize(List<String> args, String url) {
run(args, url);
}
Future run(List<String> args, String url) async {
// args[0] is the mojo name
// args[1] is the remote endpoint.
// args[2+] are the words to echo.
print("$url Echo");
print(args);
String remoteEndpoint = args[1];
if (remoteEndpoint == null) {
throw new Exception('A remote endpoint must be specified');
}
// The phrase is join args[2:]
String echostr = args.length <= 2 ? "hello" : args.sublist(2).join(" ");
v23proxy.connectToRemoteService(this, echoProxy, remoteEndpoint);
print("Sending ${echostr} to echo server...");
var response = await echoProxy.ptr.echoString(echostr);
// The out arg is called value. It is a string.
print(response.value != null
? "Received: ${response.value}"
: "Failed to get an echo back");
print("Attempting EchoX to echo server...");
// The in args are a List<bool> and struct with str String field.
var echoXParam1 = <bool>[true, false, false, true];
var echoXParam2 = new AInArg()..str = "A String";
response = await echoProxy.ptr.echoX(echoXParam1, echoXParam2);
// The out arg is a single union called out.
// out is of type OutArgTypes. Of the int64 and enum, it'll return the enum.
print(response.out != null
? "Received: ${response.out}"
: "Failed to get an echoX back");
await this.closeApplication();
}
Future closeApplication() async {
print("Closing proxy...");
await echoProxy.close();
print("Closing application...");
await this.close();
assert(MojoHandle.reportLeakedHandles());
}
}
main(List args) {
MojoHandle appHandle = new MojoHandle(args[0]);
new Echo.fromHandle(appHandle);
}