PLCnext API Documentation 23.6.0.37
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
23{
24public: // enums
25
27 enum class OpenMode
28 {
29 CreateNew = 0,
30 Open,
31 OpenOrCreate,
32 };
33
35 enum class Access
36 {
37 ReadOnly,
38 WriteOnly,
39 ReadWrite
40 };
41
42public: // construction/destruction
43
51 MessageQueue(const String& name, bool blocking = false);
52
62 MessageQueue(const String& name, OpenMode openMode, Access permission = Access::ReadWrite, bool blocking = false);
63
75 MessageQueue(const String& name, OpenMode openMode, Access permission, bool blocking, long maxmsg, long msgsize);
76
82
83public: // setter/getter operations
84
88 bool IsBlocking() const;
89
95 long GetMessageCount() const;
96
102 long GetMaxMessageCount() const;
103
109 long GetMaxMessageSize() const;
110
111public: // methods
112
121 void Send(const char *pMsg, size_t len, unsigned int prio, Milliseconds timeoutMs = Milliseconds(0));
122
133 size_t Receive(char *pBuffer, size_t len, unsigned int& prio, Milliseconds timeoutMs = Milliseconds(0));
134
136 void Close();
137
144 void Unlink();
145
146private: // typedefs and usings
147
148 using IMessageQueueService = Arp::System::Ve::IMessageQueueService;
149
150private: // methods
151
152 MessageQueue(const MessageQueue& arg) = delete;
153
154 MessageQueue& operator=(const MessageQueue& arg) = delete;
155
156private: // fields
157
158 IMessageQueueService *pMessageQueueService;
159
160private: // static fields
161
162};
163
165// inline methods of class MessageQueue
166
167}}}} // end of namespace Arp::System::Commons::Ipc
Message queues allow processes to exchange data in form of messages
Definition: MessageQueue.hpp:23
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:28
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:36
@ 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