blob: 4e47c4e495e952c7f11547ea18c1f87a99d01604 [file] [log] [blame]
// Copyright 2022 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 FUCHSIA_SDK_EXAMPLES_QEMU_EDU_DRIVERS_EDU_SERVER_H_
#define FUCHSIA_SDK_EXAMPLES_QEMU_EDU_DRIVERS_EDU_SERVER_H_
// [START imports]
#include <fidl/examples.qemuedu/cpp/wire.h>
#include <lib/driver/component/cpp/logger.h>
#include "edu_device.h"
// [END imports]
// [START namespace_start]
namespace qemu_edu {
// [END namespace_start]
// [START fidl_server]
// FIDL server implementation for the `examples.qemuedu/Device` protocol.
class QemuEduServer : public fidl::WireServer<examples_qemuedu::Device> {
public:
explicit QemuEduServer(driver::Logger* logger, std::weak_ptr<edu_device::QemuEduDevice> device)
: logger_(logger), device_(std::move(device)) {}
static fidl::ServerBindingRef<examples_qemuedu::Device> BindDeviceClient(
driver::Logger* logger, async_dispatcher_t* dispatcher,
std::weak_ptr<edu_device::QemuEduDevice> device,
fidl::ServerEnd<examples_qemuedu::Device> request) {
// Bind each connection request to a unique FIDL server instance
auto server_impl = std::make_unique<QemuEduServer>(logger, device);
return fidl::BindServer(dispatcher, std::move(request), std::move(server_impl),
std::mem_fn(&QemuEduServer::OnUnbound));
}
// This method is called when a server connection is torn down.
void OnUnbound(fidl::UnbindInfo info, fidl::ServerEnd<examples_qemuedu::Device> server_end) {
if (info.is_peer_closed()) {
FDF_LOG(DEBUG, "Client disconnected");
} else if (!info.is_user_initiated()) {
FDF_LOG(ERROR, "Client connection unbound: %s", info.status_string());
}
}
// fidl::WireServer<examples_qemuedu::Device>
void ComputeFactorial(ComputeFactorialRequestView request,
ComputeFactorialCompleter::Sync& completer) override;
void LivenessCheck(LivenessCheckCompleter::Sync& completer) override;
private:
driver::Logger* logger_;
std::weak_ptr<edu_device::QemuEduDevice> device_;
};
// [END fidl_server]
// [START namespace_end]
} // namespace qemu_edu
// [END namespace_end]
#endif // FUCHSIA_SDK_EXAMPLES_QEMU_EDU_DRIVERS_EDU_SERVER_H_