blob: c451c06b1350b26cf206cb7206cff34984fce8ac [file] [log] [blame]
// Copyright 2019 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.
#include <stdio.h>
// [START includes]
#include <fuchsia/examples/cpp/fidl.h>
#include <lib/async-loop/cpp/loop.h>
#include <lib/async-loop/default.h>
#include <lib/sys/cpp/component_context.h>
// [END includes]
// [START main]
int main(int argc, const char** argv) {
async::Loop loop(&kAsyncLoopConfigAttachToCurrentThread);
fuchsia::examples::EchoPtr echo_proxy;
auto context = sys::ComponentContext::Create();
context->svc()->Connect(echo_proxy.NewRequest());
echo_proxy.set_error_handler([&loop](zx_status_t status) {
printf("Error reading incoming message: %d\n", status);
loop.Quit();
});
int num_responses = 0;
echo_proxy->SendString("hi");
echo_proxy->EchoString("hello", [&](std::string response) {
printf("Got response %s\n", response.c_str());
if (++num_responses == 2) {
loop.Quit();
}
});
echo_proxy.events().OnString = [&](std::string response) {
printf("Got event %s\n", response.c_str());
if (++num_responses == 2) {
loop.Quit();
}
};
loop.Run();
return num_responses == 2 ? 0 : 1;
}
// [END main]