PLCnext API Documentation 24.0.0.71
MessageQueue.hpp
1
2//
3// Copyright PHOENIX CONTACT Electronics GmbH
4//
6#pragma once
8
9// forwards
10namespace Arp { namespace System { namespace Ve
11{
12class IMessageQueueService;
13}}}
14
15namespace Arp { namespace System { namespace Commons { namespace Ipc
16{
17
27{
28public: // enums
29
31 enum class OpenMode
32 {
33 CreateNew = 0,
34 Open,
35 OpenOrCreate,
36 };
37
39 enum class Access
40 {
41 ReadOnly,
42 WriteOnly,
43 ReadWrite
44 };
45
46public: // construction/destruction
47
55 MessageQueue(const String& name, bool blocking = false);
56
66 MessageQueue(const String& name, OpenMode openMode, Access permission = Access::ReadWrite, bool blocking = false);
67
81 MessageQueue(const String& name, OpenMode openMode, Access permission, bool blocking, long maxmsg, long msgsize);
82
88
89public: // setter/getter operations
90
94 bool IsBlocking() const;
95
101 long GetMessageCount() const;
102
108 long GetMaxMessageCount() const;
109
115 long GetMaxMessageSize() const;
116
117public: // methods
118
127 void Send(const char *pMsg, size_t len, unsigned int prio, Milliseconds timeoutMs = Milliseconds(0));
128
139 size_t Receive(char *pBuffer, size_t len, unsigned int& prio, Milliseconds timeoutMs = Milliseconds(0));
140
142 void Close();
143
150 void Unlink();
151
152private: // typedefs and usings
153
154 using IMessageQueueService = Arp::System::Ve::IMessageQueueService;
155
156private: // methods
157
158 MessageQueue(const MessageQueue& arg) = delete;
159
160 MessageQueue& operator=(const MessageQueue& arg) = delete;
161
162private: // fields
163
164 IMessageQueueService *pMessageQueueService;
165
166private: // static fields
167
168};
169
171// inline methods of class MessageQueue
172
173}}}} // end of namespace Arp::System::Commons::Ipc
Message queues allow processes to exchange data in form of messages
Definition: MessageQueue.hpp:27
void Send(const char *pMsg, size_t len, unsigned int prio, Milliseconds timeoutMs=Milliseconds(0))
Sends a message to the queue.
OpenMode
Supported opening modes for message queues.
Definition: MessageQueue.hpp:32
void Unlink()
Deletes the message queue.
MessageQueue(const String &name, OpenMode openMode, Access permission, bool blocking, long maxmsg, long msgsize)
Tries to construct a new message queue based on assigned parameters.
bool IsBlocking() const
Checks if this message queue was created in blocking mode.
void Close()
Closes the message queue.
long GetMessageCount() const
Queries the current amount of message stored in the message queue.
MessageQueue(const String &name, OpenMode openMode, Access permission=Access::ReadWrite, bool blocking=false)
Tries to construct a new message queue based on assigned parameters.
Access
Supported access modes for message queues.
Definition: MessageQueue.hpp:40
@ ReadWrite
Object owner can reas and write to message queue.
~MessageQueue(void)
Destructs this instance and closes the message queue.
long GetMaxMessageSize() const
Queries the maximal supported byte-size of a message.
long GetMaxMessageCount() const
Queries the maximal amount of messages that can be stored inside the message queue.
MessageQueue(const String &name, bool blocking=false)
Tries to open an already existing message queue.
size_t Receive(char *pBuffer, size_t len, unsigned int &prio, Milliseconds timeoutMs=Milliseconds(0))
Receives a message from the queue.
std::chrono::milliseconds Milliseconds
The Arp Milliseconds unit class.
Definition: TypeSystem.h:52
@ System
System components used by the System, Device, Plc or Io domains.
Root namespace for the PLCnext API