blob: 82bb56f819021ecf746b774c6e6645143797a7d4 [file] [log] [blame]
// Copyright 2018 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_FIDL_CPP_OVERNET_STREAM_H_
#define LIB_FIDL_CPP_OVERNET_STREAM_H_
#include <lib/fidl/cpp/message.h>
#include <lib/fit/function.h>
#include <zircon/types.h>
#include <map>
namespace overnet {
class FidlStream {
public:
virtual ~FidlStream();
zx_status_t Process_(::fidl::Message message);
protected:
void Send_(fidl::Message message,
fit::function<zx_status_t(fidl::Message)> callback) {
Send_(AllocateCallback(std::move(callback)), std::move(message));
}
void Send_(zx_txid_t txid, fidl::Message message);
virtual void Send_(fidl::Message message) = 0;
private:
// Implementations should ensure that no mutation is made to message when
// returning ZX_ERR_NOT_SUPPORTED.
virtual zx_status_t Dispatch_(::fidl::Message *message) = 0;
zx_txid_t AllocateCallback(
fit::function<zx_status_t(fidl::Message)> callback);
std::map<zx_txid_t, fit::function<zx_status_t(fidl::Message)>> callbacks_;
zx_txid_t next_txid_ = 1;
};
} // namespace overnet
#endif