Contur 2
Educational OS kernel simulator
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
40 ~MessageQueue() override;
41
43 MessageQueue(const MessageQueue &) = delete;
44
49
51 MessageQueue &operator=(MessageQueue &&) noexcept;
52
55 [[nodiscard]] Result<std::size_t> write(std::span<const std::byte> data) override;
56
59 [[nodiscard]] Result<std::size_t> read(std::span<std::byte> buffer) override;
60
62 void close() override;
63
65 [[nodiscard]] bool isOpen() const noexcept override;
66
68 [[nodiscard]] std::string_view name() const noexcept override;
69
72 [[nodiscard]] Result<void> send(const Message &message);
73
76 [[nodiscard]] Result<Message> receive();
77
79 [[nodiscard]] std::size_t size() const noexcept;
80
82 [[nodiscard]] std::size_t maxMessages() const noexcept;
83
85 [[nodiscard]] bool isPriorityMode() const noexcept;
86
87 private:
88 struct Impl;
89 std::unique_ptr<Impl> impl_;
90 };
91
92} // 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
Destroys message queue.
MessageQueue(const MessageQueue &)=delete
Copy construction is disabled.
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
Move-constructs queue state.
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
Copy assignment is disabled.
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.