CMSDK 2.0.1
Cross-platform C++ base library and SDK for the Psyclone AIOS platform
Loading...
Searching...
No Matches
cmlabs::MessageQueue Class Reference

Static facade over shared-memory message queues and a request/reply matcher. More...

#include <MemoryQueues.h>

Collaboration diagram for cmlabs::MessageQueue:
[legend]

Public Member Functions

 MessageQueue (char *data, uint32 size)
 Attach this wrapper to a raw queue region.
 ~MessageQueue ()
 changeSize (uint32 size)
 Update the wrapper's notion of the region size.
 changeData (char *data)
 Re-point the wrapper at a new mapped address.

Static Public Member Functions

static bool CreateMessageQueue (uint32 &qid, const char *name=NULL)
 Create a new shared queue.
static bool AddMessageToQueue (uint32 qid, DataMessage *msg)
 Append a message (copied into shared memory).
static DataMessageWaitForMessageQueue (uint32 qid, uint32 ms)
 Block up to ms milliseconds for a message.
static uint32 GetMessageQueueSize (uint32 qid)
static bool GetMessageQueueByName (uint32 &qid, const char *name)
 Look up a queue id by its global name.
static bool DestroyMessageQueue (uint32 qid)
 Destroy a queue and release its shared memory.
static bool AddRequest (DataMessage *msg, uint32 &reqID)
 Submit a request message.
static bool AddReply (uint32 reqID, bool success, DataMessage *msg)
 Post the reply for request reqID.
static bool WaitForReply (uint32 reqID, uint32 ms, uint8 &status, DataMessage **outMsg)
 Block up to ms for the reply to reqID.
static uint32 GetRequestCount ()
static bool UnitTest ()
 Self-test of queue + request logic.
static bool UnitTestQueues ()
 Self-test of the raw queue ring buffer.

Protected Attributes

MessageQueueHeaderheader
 Mapped queue header (points into shared memory; not owned).

Friends

THREAD_RET THREAD_FUNCTION_CALL QueueTest (THREAD_ARG arg)

Detailed Description

Static facade over shared-memory message queues and a request/reply matcher.

Queues are addressed by queue id (qid) or an optional global name. All static calls are safe from any process/thread; waits block on named semaphores with a timeout. Returned DataMessages are heap copies owned by the caller.

uint32 qid;
MessageQueue::AddMessageToQueue(qid, msg); // producer process
DataMessage* m = MessageQueue::WaitForMessageQueue(qid, 100); // consumer, 100 ms
if (m) { ...; delete m; }
The central Psyclone data container: a self-contained binary message with typed, named user entries.
static bool AddMessageToQueue(uint32 qid, DataMessage *msg)
Append a message (copied into shared memory).
static DataMessage * WaitForMessageQueue(uint32 qid, uint32 ms)
Block up to ms milliseconds for a message.
static bool CreateMessageQueue(uint32 &qid, const char *name=NULL)
Create a new shared queue.

Definition at line 48 of file MemoryQueues.h.

Constructor & Destructor Documentation

◆ MessageQueue()

cmlabs::MessageQueue::MessageQueue ( char * data,
uint32 size )

Attach this wrapper to a raw queue region.

Parameters
dataMapped region.
sizeRegion bytes.

◆ ~MessageQueue()

cmlabs::MessageQueue::~MessageQueue ( )

Member Function Documentation

◆ AddMessageToQueue()

bool cmlabs::MessageQueue::AddMessageToQueue ( uint32 qid,
DataMessage * msg )
static

Append a message (copied into shared memory).

Caller keeps ownership of msg.

Returns
true on success.

◆ AddReply()

bool cmlabs::MessageQueue::AddReply ( uint32 reqID,
bool success,
DataMessage * msg )
static

Post the reply for request reqID.

Parameters
reqIDRequest id being answered.
successOutcome flag.
msgReply payload (copied).
Returns
true on success.

◆ AddRequest()

bool cmlabs::MessageQueue::AddRequest ( DataMessage * msg,
uint32 & reqID )
static

Submit a request message.

Parameters
msgRequest (caller keeps ownership).
reqIDReceives the request id.
Returns
true on success.

◆ changeData()

cmlabs::MessageQueue::changeData ( char * data)

Re-point the wrapper at a new mapped address.

Note
Missing return type — pre-C++11 implicit int; left untouched.

◆ changeSize()

cmlabs::MessageQueue::changeSize ( uint32 size)

Update the wrapper's notion of the region size.

Note
Missing return type — pre-C++11 implicit int; left untouched.

◆ CreateMessageQueue()

bool cmlabs::MessageQueue::CreateMessageQueue ( uint32 & qid,
const char * name = NULL )
static

Create a new shared queue.

Parameters
qidReceives the queue id.
nameOptional global name.
Returns
true on success.

◆ DestroyMessageQueue()

bool cmlabs::MessageQueue::DestroyMessageQueue ( uint32 qid)
static

Destroy a queue and release its shared memory.

Returns
true on success.

◆ GetMessageQueueByName()

bool cmlabs::MessageQueue::GetMessageQueueByName ( uint32 & qid,
const char * name )
static

Look up a queue id by its global name.

Returns
true if found.

◆ GetMessageQueueSize()

uint32 cmlabs::MessageQueue::GetMessageQueueSize ( uint32 qid)
static
Returns
Number of messages currently queued in qid.

◆ GetRequestCount()

uint32 cmlabs::MessageQueue::GetRequestCount ( )
static
Returns
Number of requests currently outstanding.

◆ UnitTest()

bool cmlabs::MessageQueue::UnitTest ( )
static

Self-test of queue + request logic.

Returns
true if all checks pass.

◆ UnitTestQueues()

bool cmlabs::MessageQueue::UnitTestQueues ( )
static

Self-test of the raw queue ring buffer.

Returns
true if all checks pass.

References THREAD_ARG, THREAD_FUNCTION_CALL, and THREAD_RET.

◆ WaitForMessageQueue()

DataMessage * cmlabs::MessageQueue::WaitForMessageQueue ( uint32 qid,
uint32 ms )
static

Block up to ms milliseconds for a message.

Returns
Heap copy owned by caller, or NULL on timeout.

◆ WaitForReply()

bool cmlabs::MessageQueue::WaitForReply ( uint32 reqID,
uint32 ms,
uint8 & status,
DataMessage ** outMsg )
static

Block up to ms for the reply to reqID.

Parameters
reqIDRequest id to wait for.
msTimeout in ms.
statusReceives the request status.
outMsgReceives a caller-owned reply copy (may be NULL).
Returns
true if a reply arrived.

◆ QueueTest

Member Data Documentation

◆ header

MessageQueueHeader* cmlabs::MessageQueue::header
protected

Mapped queue header (points into shared memory; not owned).

Definition at line 85 of file MemoryQueues.h.


The documentation for this class was generated from the following file: