PLCnext API Documentation  21.0.0.35466
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 
81  ~MessageQueue(void);
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
OpenMode
Supported opening modes for message queues.
Definition: MessageQueue.hpp:27
std::chrono::milliseconds Milliseconds
The Arp Milliseconds unit class.
Definition: TypeSystem.h:36
Root namespace for the PLCnext API
Message queues allow processes to exchange data in form of messages
Definition: MessageQueue.hpp:22
System components used by the System, Device, Plc or Io domains.
Access
Supported access modes for message queues.
Definition: MessageQueue.hpp:35