Program Listing for File ReceiveMessage.hpp

Return to documentation for file (BackendAsyncmsg/ReceiveMessage.hpp)

#ifndef NETIO3BACKEND_BACKENDASYNCMSG_RECEIVEMESSAGE_HPP
#define NETIO3BACKEND_BACKENDASYNCMSG_RECEIVEMESSAGE_HPP

#include <cstdint>
#include <span>
#include <vector>

#include <boost/asio/buffer.hpp>

#include <asyncmsg/Message.h>

namespace netio3::asyncmsg {
  class ReceiveMessage : public felix::asyncmsg::InputMessage
  {
  public:
    struct ReceiveMessageConfig {
      std::uint32_t typeId{};
      std::uint32_t transactionId{};
      std::uint32_t size{};
    };

    struct Message {
      Message() = default;
      Message(const Message&) = delete;
      Message(Message&&) = default;
      Message& operator=(const Message&) = delete;
      Message& operator=(Message&&) = default;
      ~Message() = default;

      std::vector<std::uint8_t> data;
    };

    explicit ReceiveMessage(const ReceiveMessageConfig& config);

    void toBuffers(std::vector<boost::asio::mutable_buffer>& buffers) override;

    [[nodiscard]] std::uint32_t typeId() const override { return m_typeId; }

    [[nodiscard]] std::uint32_t transactionId() const override { return m_transactionId; }

    [[nodiscard]] std::uint32_t msgSize() const { return m_msgSize; }

    [[nodiscard]] std::span<std::uint8_t> data() { return m_message.data; }

    [[nodiscard]] Message& getMessage() { return m_message; }

  private:
    std::uint32_t m_typeId{};
    std::uint32_t m_transactionId{};
    std::uint32_t m_msgSize{};
    Message m_message;
  };
}  // namespace netio3::asyncmsg

#endif  // NETIO3BACKEND_BACKENDASYNCMSG_RECEIVEMESSAGE_HPP