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

Client endpoint connected to a named shared-memory request server. More...

#include <MemoryRequestConnection.h>

Public Member Functions

 MemoryRequestConnection ()
 ~MemoryRequestConnection ()
bool connect (const char *memoryName)
 Attach to the named server segment and claim a connection slot.
bool shutdown ()
 Release the connection slot and detach.
uint64 makeRequest (DataMessage *msg)
 Submit a request to the server.
uint16 getRequestStatus (uint64 id, uint64 &createdTime, uint64 &lastUpdateTime)
 Query a request's status.
DataMessagewaitForRequestReply (uint32 ms)
 Wait for the reply to this connection's most recent request.
DataMessagewaitForRequestReply (uint64 id, uint32 ms)
 Wait for the reply to request id (out-of-order replies are cached).
DataMessagewaitForRequest (uint32 ms)
 Server side: wait for the next incoming request.
bool setRequestStatus (uint64 id, uint16 status)
 Server side: advance a request's status.
bool replyToRequest (uint64 id, DataMessage *msg)
 Server side: send the reply for id (copied).

Detailed Description

Client endpoint connected to a named shared-memory request server.

One instance per client; not shareable across threads without external locking (it keeps per-connection cursors and a reply cache). All returned DataMessages are heap copies owned by the caller. Wait calls block up to ms milliseconds.

con.connect("psyclone.requests");
uint64 id = con.makeRequest(msg);
DataMessage* reply = con.waitForRequestReply(id, 1000); // 1 s timeout
if (reply) { ...; delete reply; }
con.shutdown();
The central Psyclone data container: a self-contained binary message with typed, named user entries.
DataMessage * waitForRequestReply(uint32 ms)
Wait for the reply to this connection's most recent request.
bool connect(const char *memoryName)
Attach to the named server segment and claim a connection slot.
bool shutdown()
Release the connection slot and detach.
uint64 makeRequest(DataMessage *msg)
Submit a request to the server.

Definition at line 65 of file MemoryRequestConnection.h.

Constructor & Destructor Documentation

◆ MemoryRequestConnection()

cmlabs::MemoryRequestConnection::MemoryRequestConnection ( )

Definition at line 9 of file MemoryRequestConnection.cpp.

◆ ~MemoryRequestConnection()

cmlabs::MemoryRequestConnection::~MemoryRequestConnection ( )

Definition at line 19 of file MemoryRequestConnection.cpp.

References shutdown().

Member Function Documentation

◆ connect()

bool cmlabs::MemoryRequestConnection::connect ( const char * memoryName)

Attach to the named server segment and claim a connection slot.

Parameters
memoryNameGlobal name chosen by the server.
Returns
true on success.

Definition at line 23 of file MemoryRequestConnection.cpp.

References cmlabs::MemoryRequestQueues::CheckRequestMap(), cmlabs::GetTimeNow(), cmlabs::MemoryRequestQueues::InitQueue(), cmlabs::utils::OpenSharedMemorySegment(), shutdown(), and cmlabs::utils::StringFormat().

Referenced by cmlabs::MemoryRequestServer::UnitTest().

◆ getRequestStatus()

uint16 cmlabs::MemoryRequestConnection::getRequestStatus ( uint64 id,
uint64 & createdTime,
uint64 & lastUpdateTime )

Query a request's status.

Returns
MEMORYREQUEST_* value; timestamps via out-params.

Definition at line 139 of file MemoryRequestConnection.cpp.

References cmlabs::MemoryRequestQueues::GetRequestStatus(), and MEMORYREQUEST_ERROR.

Referenced by cmlabs::MemoryRequestServer::UnitTest().

◆ makeRequest()

◆ replyToRequest()

◆ setRequestStatus()

bool cmlabs::MemoryRequestConnection::setRequestStatus ( uint64 id,
uint16 status )

Server side: advance a request's status.

Returns
true on success.

Definition at line 200 of file MemoryRequestConnection.cpp.

References cmlabs::MemoryRequestQueues::SetRequestStatus().

◆ shutdown()

bool cmlabs::MemoryRequestConnection::shutdown ( )

Release the connection slot and detach.

Returns
true on success.

Definition at line 79 of file MemoryRequestConnection.cpp.

References cmlabs::utils::CloseSharedMemorySegment(), and cmlabs::utils::Mutex::leave().

Referenced by connect(), and ~MemoryRequestConnection().

◆ waitForRequest()

DataMessage * cmlabs::MemoryRequestConnection::waitForRequest ( uint32 ms)

Server side: wait for the next incoming request.

Parameters
msTimeout in ms.
Returns
Caller-owned request or NULL on timeout.

Definition at line 184 of file MemoryRequestConnection.cpp.

References cmlabs::DataMessage::getReference(), MEMORYREQUEST_RECEIVED, and cmlabs::MemoryRequestQueues::SetRequestStatus().

◆ waitForRequestReply() [1/2]

DataMessage * cmlabs::MemoryRequestConnection::waitForRequestReply ( uint32 ms)

Wait for the reply to this connection's most recent request.

Parameters
msTimeout in ms.
Returns
Caller-owned reply or NULL on timeout.

Definition at line 166 of file MemoryRequestConnection.cpp.

References cmlabs::MemoryRequestQueues::CloseRequest(), cmlabs::DataMessage::getReference(), MEMORYREQUEST_REPLYRECEIVED, and cmlabs::MemoryRequestQueues::SetRequestStatus().

Referenced by cmlabs::MemoryRequestServer::UnitTest().

◆ waitForRequestReply() [2/2]

DataMessage * cmlabs::MemoryRequestConnection::waitForRequestReply ( uint64 id,
uint32 ms )

Wait for the reply to request id (out-of-order replies are cached).

Parameters
idRequest id to wait for.
msTimeout in ms.
Returns
Caller-owned reply or NULL on timeout.

Definition at line 260 of file MemoryRequestConnection.cpp.

References cmlabs::MemoryRequestQueues::CloseRequest(), cmlabs::DataMessage::getReference(), cmlabs::GetTimeAgeMS(), cmlabs::GetTimeNow(), MEMORYREQUEST_REPLYRECEIVED, and cmlabs::MemoryRequestQueues::SetRequestStatus().


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