blob: cc485d514f97bc4329e0fe0d2c70ee833eaf7136 [file] [log] [blame] [edit]
// Copyright 2023 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "lorgnette/cli/async_handler.h"
#include <base/check.h>
#include <base/logging.h>
namespace lorgnette::cli {
AsyncHandler::AsyncHandler(base::RepeatingClosure quit_closure,
ManagerProxy* manager)
: quit_closure_(quit_closure), manager_(manager), cvar_(&lock_) {
DCHECK(manager_);
}
AsyncHandler::~AsyncHandler() = default;
bool AsyncHandler::WaitUntilConnected() {
ConnectSignal();
base::AutoLock auto_lock(lock_);
while (!connected_callback_called_) {
cvar_.Wait();
}
return connection_status_;
}
void AsyncHandler::OnConnectedCallback(const std::string& interface_name,
const std::string& signal_name,
bool signal_connected) {
base::AutoLock auto_lock(lock_);
connected_callback_called_ = true;
connection_status_ = signal_connected;
if (!signal_connected) {
LOG(ERROR) << "Failed to connect to " << signal_name << " signal";
}
cvar_.Signal();
}
} // namespace lorgnette::cli