CMSDK 2.0.1
Cross-platform C++ base library and SDK for the Psyclone AIOS platform
Loading...
Searching...
No Matches
MemoryRequestConnection.h
Go to the documentation of this file.
1
13
14#if !defined(_MEMORYREQUESTCONNECTION_H_)
15#define _MEMORYREQUESTCONNECTION_H_
16
17#include "MemoryRequestQueues.h"
18
19namespace cmlabs {
20
22#define MEMORYREQUESTSERVER_INIT 1
23
24
30 uint32 size;
31 uint32 cid;
34 char name[256];
35 uint16 status;
40};
41
45 uint32 size;
46 uint32 conid;
49 uint16 status;
50};
51
66public:
69
72 bool connect(const char* memoryName);
73 bool shutdown();
74
77 uint64 makeRequest(DataMessage* msg);
79 uint16 getRequestStatus(uint64 id, uint64& createdTime, uint64& lastUpdateTime);
83
86 DataMessage* waitForRequestReply(uint64 id, uint32 ms);
87
90 DataMessage* waitForRequest(uint32 ms);
91 bool setRequestStatus(uint64 id, uint16 status);
92 bool replyToRequest(uint64 id, DataMessage* msg);
93
94private:
95 RequestServerHeader* serverHeader;
96 RequestConnectionHeader* conHeader;
97 char* queueHeader;
98 char* requestHeader;
99
100 std::map<uint64, DataMessage*> replyCache;
101
102 uint32 conID;
103 bool oneWaitingForQueue;
104
105 utils::Mutex* mutex;
106 utils::Event cacheEvent;
107
108 char* getQueueHeader(uint32 otherConID);
109 DataMessage* waitForQueue(uint32 ms);
110};
111
112} // namespace cmlabs
113
114#endif //_MEMORYREQUESTCONNECTION_H_
115
Static algorithms for request queues and the request-status map used by the shared-memory request/rep...
The central Psyclone data container: a self-contained binary message with typed, named user entries.
bool replyToRequest(uint64 id, DataMessage *msg)
Server side: send the reply for id (copied).
bool setRequestStatus(uint64 id, uint16 status)
Server side: advance a request's status.
uint16 getRequestStatus(uint64 id, uint64 &createdTime, uint64 &lastUpdateTime)
Query a request's status.
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.
DataMessage * waitForRequest(uint32 ms)
Server side: wait for the next incoming request.
Auto-reset notification event (condition variable style), optionally named for cross-process use.
Definition Utils.h:533
Recursive mutual-exclusion lock, optionally named for cross-process use.
Definition Utils.h:463
Header of one client connection area within a request-server segment.
Header of a request-server segment: identity, limits and layout parameters.