blob: f1bb1b120822c8e9c5eba96b5250f0e6662e4e26 [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.
#ifndef SRC_DEVELOPER_DEBUG_ZXDB_CONSOLE_CONSOLE_IMPL_H_
#define SRC_DEVELOPER_DEBUG_ZXDB_CONSOLE_CONSOLE_IMPL_H_
#include "src/developer/debug/shared/fd_watcher.h"
#include "src/developer/debug/shared/message_loop.h"
#include "src/developer/debug/zxdb/console/command.h"
#include "src/developer/debug/zxdb/console/console.h"
#include "src/developer/debug/zxdb/console/console_context.h"
#include "src/lib/fxl/macros.h"
#include "src/lib/line_input/modal_line_input.h"
namespace zxdb {
class OutputBuffer;
class Session;
// The console has some virtual functions for ease of mocking the interface for tests.
class ConsoleImpl : public Console, public debug_ipc::FDWatcher {
public:
explicit ConsoleImpl(Session* session);
virtual ~ConsoleImpl();
fxl::WeakPtr<ConsoleImpl> GetImplWeakPtr();
// Console implementation
void Init() override;
void Quit() override;
void Output(const OutputBuffer& output) override;
void Clear() override;
void ModalGetOption(const line_input::ModalPromptOptions& options, OutputBuffer message,
const std::string& prompt,
line_input::ModalLineInput::ModalCompletionCallback cb) override;
void ProcessInputLine(const std::string& line, CommandCallback callback = nullptr) override;
private:
void DispatchInputLine(const std::string& line, CommandCallback callback = nullptr);
// FDWatcher implementation.
void OnFDReady(int fd, bool read, bool write, bool err) override;
// Searches for history at $HOME/.zxdb_history and loads it if found.
bool SaveHistoryFile();
void LoadHistoryFile();
debug_ipc::MessageLoop::WatchHandle stdio_watch_;
line_input::ModalLineInputStdout line_input_;
// Saves the last nonempty input line for re-running when the user just presses "Enter" with no
// parameters. This must be re-parsed each time because the context can be different.
std::string previous_line_;
fxl::WeakPtrFactory<ConsoleImpl> impl_weak_factory_;
FXL_DISALLOW_COPY_AND_ASSIGN(ConsoleImpl);
};
} // namespace zxdb
#endif // SRC_DEVELOPER_DEBUG_ZXDB_CONSOLE_CONSOLE_IMPL_H_