|  | // 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 <lib/fdio/directory.h> | 
|  |  | 
|  | #include <iostream> | 
|  | #include <string> | 
|  |  | 
|  | #include <fuchsia/examples/cpp/fidl.h> | 
|  | #include <src/lib/files/path.h> | 
|  |  | 
|  | #include "lib/fidl/cpp/string.h" | 
|  |  | 
|  | int main(int argc, const char** argv) { | 
|  | if (argc < 2) { | 
|  | printf( | 
|  | "Usage: %s <path> <strings...>\nOpens <path> as an echo server and " | 
|  | "sends <strings>\n", | 
|  | argv[0]); | 
|  | return -1; | 
|  | } | 
|  |  | 
|  | fuchsia::examples::EchoSyncPtr echo; | 
|  |  | 
|  | std::string file_name = files::AbsolutePath(argv[1]); | 
|  | zx_status_t status = | 
|  | fdio_service_connect(file_name.c_str(), echo.NewRequest().TakeChannel().release()); | 
|  | if (status != ZX_OK) { | 
|  | printf("Failed to open %s, %d\n", file_name.c_str(), status); | 
|  | return -1; | 
|  | } | 
|  |  | 
|  | for (int i = 2; i < argc; i++) { | 
|  | std::string result; | 
|  | echo->EchoString(argv[i], &result); | 
|  | printf("Response: %s\n", result.c_str()); | 
|  | } | 
|  |  | 
|  | printf("Done sending strings, close this component to disconnect.\n"); | 
|  | sleep(1000000000); | 
|  |  | 
|  | return 0; | 
|  | } |