| // 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 <fuchsia/examples/rot13/cpp/fidl.h> |
| #include <lib/async-loop/cpp/loop.h> |
| #include <lib/async-loop/default.h> |
| #include <stdlib.h> |
| #include <string.h> |
| |
| #include <string> |
| |
| #include "rot13_client_app.h" |
| |
| int main(int argc, const char **argv) { |
| std::string msg = "hello world"; |
| |
| for (int i = 1; i < argc - 1; ++i) { |
| if (!strcmp("-m", argv[i])) { |
| msg = argv[++i]; |
| } |
| } |
| async::Loop loop(&kAsyncLoopConfigAttachToCurrentThread); |
| |
| rot13::Rot13ClientApp app; |
| app.Start(); |
| |
| app.rot13().set_error_handler([&loop](zx_status_t status) { |
| fprintf(stderr, "ROT13 server closed connection: %d\n", status); |
| loop.Quit(); |
| }); |
| |
| // wait for both calls |
| uint32_t checksum = 0; |
| std::string rotated; |
| app.rot13()->Checksum(msg, [msg, &checksum](uint32_t value) { |
| printf("***** Message: %s has checksum of %u\n", msg.c_str(), value); |
| checksum = value; |
| }); |
| |
| app.rot13()->Encrypt(msg, [&app, &rotated](std::string value1) { |
| printf("Rotated message is %s\n", value1.c_str()); |
| app.rot13()->Encrypt(value1, |
| [&rotated](std::string value2) { rotated = value2; }); |
| }); |
| |
| int ret = ZX_OK; |
| while (ret == ZX_OK) { |
| ret = loop.Run(zx::deadline_after(zx::sec(1)), false); |
| if (checksum && rotated.length() > 0) { |
| printf("unrotated message = %s\n", rotated.c_str()); |
| loop.Quit(); |
| } |
| } |
| return ret == ZX_ERR_CANCELED ? 0 : ret; |
| } |