blob: 39015bf013eb7a7ad5f61e7ab6e8b1a2f489e80a [file]
// 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.
#include <fuchsia/ledger/cloud/cpp/fidl.h>
#include <lib/async-loop/cpp/loop.h>
#include <lib/async-loop/default.h>
#include <lib/async/cpp/task.h>
#include <lib/fidl/cpp/binding_set.h>
#include <lib/sys/cpp/component_context.h>
#include <memory>
#include "src/ledger/cloud_provider_in_memory/lib/fake_cloud_provider.h"
#include "src/ledger/lib/logging/logging.h"
#include "src/ledger/lib/rng/system_random.h"
namespace cloud_provider {
namespace {
class App {
public:
explicit App(async_dispatcher_t* dispatcher)
: dispatcher_(dispatcher), component_context_(sys::ComponentContext::Create()) {
LEDGER_DCHECK(component_context_);
}
App(const App&) = delete;
App& operator=(const App&) = delete;
~App() = default;
bool Start() {
cloud_provider_impl_ = std::make_unique<ledger::FakeCloudProvider>(dispatcher_, &random_);
component_context_->outgoing()->AddPublicService<CloudProvider>(
[this](fidl::InterfaceRequest<CloudProvider> request) {
cloud_provider_bindings_.AddBinding(cloud_provider_impl_.get(), std::move(request));
});
return true;
}
private:
async_dispatcher_t* dispatcher_;
ledger::SystemRandom random_;
std::unique_ptr<sys::ComponentContext> component_context_;
std::unique_ptr<ledger::FakeCloudProvider> cloud_provider_impl_;
fidl::BindingSet<CloudProvider> cloud_provider_bindings_;
};
int Main(int argc, const char** argv) {
async::Loop loop(&kAsyncLoopConfigAttachToCurrentThread);
App app(loop.dispatcher());
int return_code = 0;
async::PostTask(loop.dispatcher(), [&return_code, &app, &loop] {
if (!app.Start()) {
return_code = -1;
loop.Quit();
}
});
loop.Run();
return return_code;
}
} // namespace
} // namespace cloud_provider
int main(int argc, const char** argv) { return cloud_provider::Main(argc, argv); }