cpp-msgpack-rpc
0.2.0
An RPC library implementing MessagePack RPC.
Toggle main menu visibility
Loading...
Searching...
No Matches
sent_message_queue.h
Go to the documentation of this file.
1
/*
2
* Copyright 2023 MusicScience37 (Kenta Kabashima)
3
*
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at
7
*
8
* http://www.apache.org/licenses/LICENSE-2.0
9
*
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
*/
20
#pragma once
21
22
#include <mutex>
23
#include <optional>
24
#include <queue>
25
#include <tuple>
26
#include <utility>
27
28
#include "
msgpack_rpc/messages/message_id.h
"
29
#include "
msgpack_rpc/messages/serialized_message.h
"
30
31
namespace
msgpack_rpc::clients::impl
{
32
36
class
SentMessageQueue
{
37
public
:
39
SentMessageQueue
() =
default
;
40
46
[[nodiscard]] std::tuple<std::optional<messages::SerializedMessage>,
47
std::optional<messages::MessageID>>
48
next
() {
49
std::unique_lock<std::mutex> lock(
mutex_
);
50
if
(
queue_
.empty()) {
51
return
{std::nullopt, std::nullopt};
52
}
53
return
queue_
.front();
54
}
55
59
void
pop
() {
60
std::unique_lock<std::mutex> lock(
mutex_
);
61
queue_
.pop();
62
}
63
70
void
push
(
messages::SerializedMessage
message,
71
std::optional<messages::MessageID>
id
= std::nullopt) {
72
std::unique_lock<std::mutex> lock(
mutex_
);
73
queue_
.emplace(std::move(message),
id
);
74
}
75
76
private
:
78
std::queue<std::tuple<
messages::SerializedMessage
,
79
std::optional<messages::MessageID>>>
80
queue_
{};
81
83
std::mutex
mutex_
{};
84
};
85
86
}
// namespace msgpack_rpc::clients::impl
msgpack_rpc::clients::impl::SentMessageQueue::pop
void pop()
Pop a message.
Definition
sent_message_queue.h:59
msgpack_rpc::clients::impl::SentMessageQueue::queue_
std::queue< std::tuple< messages::SerializedMessage, std::optional< messages::MessageID > > > queue_
Queue.
Definition
sent_message_queue.h:80
msgpack_rpc::clients::impl::SentMessageQueue::next
std::tuple< std::optional< messages::SerializedMessage >, std::optional< messages::MessageID > > next()
Get the next message.
Definition
sent_message_queue.h:48
msgpack_rpc::clients::impl::SentMessageQueue::mutex_
std::mutex mutex_
Mutex.
Definition
sent_message_queue.h:83
msgpack_rpc::clients::impl::SentMessageQueue::push
void push(messages::SerializedMessage message, std::optional< messages::MessageID > id=std::nullopt)
Push a message.
Definition
sent_message_queue.h:70
msgpack_rpc::clients::impl::SentMessageQueue::SentMessageQueue
SentMessageQueue()=default
Constructor.
msgpack_rpc::messages::SerializedMessage
Class of serialized message data.
Definition
serialized_message.h:34
message_id.h
Definition of MessageID type.
msgpack_rpc::clients::impl
Namespace of internal implementations.
Definition
i_call_future_impl.h:26
serialized_message.h
Definition of SerializedMessage class.
src
msgpack_rpc
clients
impl
sent_message_queue.h
Generated on
for cpp-msgpack-rpc by
1.18.0