blob: 8649b29aff6c0cc054a573fabaad935d229e275d [file] [log] [blame]
// Copyright 2021 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "iioservice/iioservice_simpleclient/daemon.h"
#include <sysexits.h>
#include <memory>
#include <utility>
#include <base/functional/bind.h>
#include <base/task/single_thread_task_runner.h>
#include <chromeos/mojo/service_constants.h>
#include <mojo/core/embedder/embedder.h>
#include "iioservice/include/common.h"
namespace iioservice {
Daemon::~Daemon() = default;
Daemon::Daemon() = default;
int Daemon::OnInit() {
int exit_code = brillo::Daemon::OnInit();
if (exit_code != EX_OK)
return exit_code;
mojo::core::Init();
ipc_support_ = std::make_unique<mojo::core::ScopedIPCSupport>(
base::SingleThreadTaskRunner::GetCurrentDefault(),
mojo::core::ScopedIPCSupport::ShutdownPolicy::FAST);
SetSensorClient();
ConnectToMojoServiceManager();
return exit_code;
}
void Daemon::OnMojoDisconnect() {
LOGF(INFO) << "Quitting this process.";
Quit();
}
void Daemon::ConnectToMojoServiceManager() {
auto service_manager_remote =
chromeos::mojo_service_manager::ConnectToMojoServiceManager();
if (!service_manager_remote) {
LOGF(ERROR) << "Failed to connect to Mojo Service Manager";
Quit();
return;
}
service_manager_.Bind(std::move(service_manager_remote));
service_manager_.set_disconnect_with_reason_handler(base::BindOnce(
&Daemon::OnServiceManagerDisconnect, base::Unretained(this)));
mojo::PendingRemote<cros::mojom::SensorService> sensor_service_remote;
service_manager_->Request(
chromeos::mojo_services::kIioSensor, std::nullopt,
sensor_service_remote.InitWithNewPipeAndPassReceiver().PassPipe());
sensor_client_->SetUpChannel(std::move(sensor_service_remote));
}
void Daemon::OnServiceManagerDisconnect(uint32_t custom_reason,
const std::string& description) {
auto error = static_cast<chromeos::mojo_service_manager::mojom::ErrorCode>(
custom_reason);
LOGF(ERROR) << "ServiceManagerDisconnected, error: " << error
<< ", description: " << description;
Quit();
}
} // namespace iioservice