blob: 9b8cee4df1a0c80979851d850d5a1bd88549fc3a [file] [log] [blame] [edit]
// Copyright 2023 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 LIB_COMPONENT_TESTS_ECHO_SERVER_H_
#define LIB_COMPONENT_TESTS_ECHO_SERVER_H_
#include <fidl/fidl.service.test/cpp/wire.h>
#include <fidl/fidl.service.test/cpp/wire_test_base.h>
#include <lib/syslog/cpp/macros.h>
using Echo = fidl_service_test::Echo;
using EchoService = fidl_service_test::EchoService;
class EchoCommon : public fidl::WireServer<Echo> {
public:
explicit EchoCommon(async_dispatcher_t* dispatcher) : dispatcher_(dispatcher) {}
explicit EchoCommon(const char* prefix, async_dispatcher_t* dispatcher,
unsigned int* called = nullptr)
: prefix_(prefix), dispatcher_(dispatcher), called_(called) {}
void Connect(fidl::ServerEnd<Echo> request) {
bindings_.AddBinding(dispatcher_, std::move(request), this, fidl::kIgnoreBindingClosure);
}
void Clone(CloneRequestView request, CloneCompleter::Sync& completer) override {
Connect(fidl::ServerEnd<Echo>(request->request.TakeChannel()));
}
void EchoString(EchoStringRequestView request, EchoStringCompleter::Sync& completer) override {
if (called_) {
*called_ += 1;
}
std::string reply;
if (!prefix_.empty()) {
reply += prefix_ + ": ";
}
reply += std::string(request->value.data(), request->value.size());
completer.Reply(fidl::StringView::FromExternal(reply));
}
fidl::ProtocolHandler<Echo> CreateHandler() {
return bindings_.CreateHandler(this, dispatcher_, fidl::kIgnoreBindingClosure);
}
private:
std::string prefix_;
async_dispatcher_t* dispatcher_;
fidl::ServerBindingGroup<Echo> bindings_;
unsigned int* called_ = nullptr;
};
#endif // LIB_COMPONENT_TESTS_ECHO_SERVER_H_