contur2
Loading...
Searching...
No Matches
message_queue.h
Go to the documentation of this file.
1
3
4#pragma once
5
6#include <cstdint>
7#include <memory>
8#include <string>
9#include <vector>
10
12
13namespace contur {
14
16 struct Message
17 {
19 std::uint32_t type = 0;
21 std::uint32_t priority = 0;
23 std::vector<std::byte> payload;
24 };
25
30 class MessageQueue final : public IIpcChannel
31 {
32 public:
37 explicit MessageQueue(std::string name, std::size_t maxMessages = 64, bool priorityMode = false);
38 ~MessageQueue() override;
39
40 MessageQueue(const MessageQueue &) = delete;
43 MessageQueue &operator=(MessageQueue &&) noexcept;
44
47 [[nodiscard]] Result<std::size_t> write(std::span<const std::byte> data) override;
48
51 [[nodiscard]] Result<std::size_t> read(std::span<std::byte> buffer) override;
52
54 void close() override;
55
57 [[nodiscard]] bool isOpen() const noexcept override;
58
60 [[nodiscard]] std::string_view name() const noexcept override;
61
64 [[nodiscard]] Result<void> send(const Message &message);
65
68 [[nodiscard]] Result<Message> receive();
69
71 [[nodiscard]] std::size_t size() const noexcept;
72
74 [[nodiscard]] std::size_t maxMessages() const noexcept;
75
77 [[nodiscard]] bool isPriorityMode() const noexcept;
78
79 private:
80 struct Impl;
81 std::unique_ptr<Impl> impl_;
82 };
83
84} // namespace contur
Common interface for IPC channels.
MessageQueue(std::string name, std::size_t maxMessages=64, bool priorityMode=false)
Creates a message queue.
~MessageQueue() override
MessageQueue(const MessageQueue &)=delete
std::string_view name() const noexcept override
Queue name.
Result< Message > receive()
Dequeues one message.
Result< void > send(const Message &message)
Enqueues a typed message.
Result< std::size_t > write(std::span< const std::byte > data) override
Enqueues a raw payload as a message.
std::size_t maxMessages() const noexcept
Maximum queue length in messages.
std::unique_ptr< Impl > impl_
bool isOpen() const noexcept override
Returns whether queue is open.
bool isPriorityMode() const noexcept
True when priority ordering is enabled.
MessageQueue(MessageQueue &&) noexcept
std::size_t size() const noexcept
Number of currently queued messages.
Result< std::size_t > read(std::span< std::byte > buffer) override
Dequeues one message and copies its payload to buffer.
void close() override
Closes queue and clears pending messages.
MessageQueue & operator=(const MessageQueue &)=delete
A result type that holds either a success value of type T or an ErrorCode.
Definition error.h:104
IIpcChannel interface for inter-process communication channels.
Definition block.h:15
Typed message used by MessageQueue.
std::vector< std::byte > payload
Opaque message payload bytes.
std::uint32_t priority
Scheduling priority (higher value = higher priority).
std::uint32_t type
User-defined message type.