blob: 644c7cec4a09968233a507915789562796ccb21b [file] [log] [blame]
// Copyright 2020 The Chromium OS 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 "iioservice/iioservice_simpleclient/daemon_observer.h"
#include <sysexits.h>
#include <memory>
#include <utility>
#include <base/bind.h>
#include <mojo/core/embedder/embedder.h>
#include "iioservice/iioservice_simpleclient/observer_impl.h"
#include "iioservice/include/common.h"
namespace iioservice {
DaemonObserver::DaemonObserver(int device_id,
cros::mojom::DeviceType device_type,
std::vector<std::string> channel_ids,
double frequency,
int timeout,
int samples)
: device_id_(device_id),
device_type_(device_type),
channel_ids_(std::move(channel_ids)),
frequency_(frequency),
timeout_(timeout),
samples_(samples),
weak_ptr_factory_(this) {}
DaemonObserver::~DaemonObserver() {}
int DaemonObserver::OnInit() {
int exit_code = DBusDaemon::OnInit();
if (exit_code != EX_OK)
return exit_code;
mojo::core::Init();
ipc_support_ = std::make_unique<mojo::core::ScopedIPCSupport>(
base::ThreadTaskRunnerHandle::Get(),
mojo::core::ScopedIPCSupport::ShutdownPolicy::FAST);
SetBus(bus_.get());
BootstrapMojoConnection();
observer_ = ObserverImpl::Create(
base::ThreadTaskRunnerHandle::Get(), device_id_, device_type_,
std::move(channel_ids_), frequency_, timeout_, samples_,
base::BindOnce(&DaemonObserver::OnMojoDisconnect,
weak_ptr_factory_.GetWeakPtr()));
return exit_code;
}
void DaemonObserver::OnClientReceived(
mojo::PendingReceiver<cros::mojom::SensorHalClient> client) {
observer_->BindClient(std::move(client));
}
void DaemonObserver::OnMojoDisconnect() {
LOGF(INFO) << "Quitting this process.";
Quit();
}
} // namespace iioservice