| // 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. |
| |
| #ifndef SRC_DEVELOPER_SHELL_CONSOLE_APP_H_ |
| #define SRC_DEVELOPER_SHELL_CONSOLE_APP_H_ |
| |
| #include <lib/fit/function.h> |
| |
| #include <optional> |
| #include <string> |
| |
| #include "src/developer/shell/console/console.h" |
| #include "src/developer/shell/console/executor.h" |
| |
| namespace shell::console { |
| |
| class App : public shell::console::Console::Client { |
| public: |
| using QuitCallback = fit::closure; |
| |
| struct Options { |
| std::optional<std::string> command; |
| }; |
| |
| App(llcpp::fuchsia::shell::Shell::SyncClient* client, async_dispatcher_t* dispatcher); |
| ~App() override; |
| |
| // Initialize the application. |
| // |
| // The application will begin processing commands on stdin asynchronously |
| // using the |dispatcher| provided to the constructor. |
| // |
| // The application will call |quit_callback| when the the application is done |
| // processing commands. |
| // |
| // Can be called at most once. |
| // |
| // Returns whether initialization succeeds. |
| bool Init(int argc, const char** argv, QuitCallback quit_callback); |
| |
| // |cmd::Console::Client| implementation: |
| Err OnConsoleCommand(std::unique_ptr<Command> command) override; |
| void OnConsoleInterrupt() override; |
| void OnConsoleError(zx_status_t status) override; |
| |
| private: |
| void Quit(); |
| |
| QuitCallback quit_callback_; |
| Options options_; |
| Console console_; |
| Executor executor_; |
| }; |
| |
| } // namespace shell::console |
| |
| #endif // SRC_DEVELOPER_SHELL_CONSOLE_APP_H_ |