PLCnext API Documentation  22.9.0.33
MessageQueue.hpp
1 //
3 // Copyright PHOENIX CONTACT Electronics GmbH
4 //
6 #pragma once
7 #include "Arp/System/Core/Arp.h"
8 
9 // forwards
10 namespace Arp { namespace System { namespace Ve
11 {
12 class IMessageQueueService;
13 }}}
14 
15 namespace Arp { namespace System { namespace Commons { namespace Ipc
16 {
17 
23 {
24 public: // 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 
42 public: // 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 
83 public: // setter/getter operations
84 
88  bool IsBlocking() const;
89 
95  long GetMessageCount() const;
96 
102  long GetMaxMessageCount() const;
103 
109  long GetMaxMessageSize() const;
110 
111 public: // 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 
146 private: // typedefs and usings
147 
148  using IMessageQueueService = Arp::System::Ve::IMessageQueueService;
149 
150 private: // methods
151 
152  MessageQueue(const MessageQueue& arg) = delete;
153 
154  MessageQueue& operator=(const MessageQueue& arg) = delete;
155 
156 private: // fields
157 
158  IMessageQueueService *pMessageQueueService;
159 
160 private: // 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
@ CreateNew
A new queue should be created. If one already exists an exception will be thrown.
@ OpenOrCreate
An already existing queue should be opened. If no one exists yet, a new one will be created.
@ Open
An already existing queue should be opened. An exception will be thrown if the message could does not...
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
@ ReadOnly
Object owner has only permission for read access.
@ WriteOnly
Object owner has only permission for write access.
@ 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:36
@ System
System components used by the System, Device, Plc or Io domains.
Root namespace for the PLCnext API