SharedData module finished.

This commit is contained in:
fancy 2023-11-02 08:03:14 -07:00
parent c459515071
commit 169ac7a0dd
4 changed files with 87 additions and 21 deletions

View File

@ -28,13 +28,15 @@ namespace SharedDataTest
SharedData *sharedDataMinor = CreateSharedData(SHARER_NAME_MINOR, "./shared_file", PROJECT_ID); SharedData *sharedDataMinor = CreateSharedData(SHARER_NAME_MINOR, "./shared_file", PROJECT_ID);
if (nullptr != sharedDataMinor) if (nullptr != sharedDataMinor)
{ {
int writableData = 99;
sharedDataMinor->mMakeSharedData(sharedDataMinor, sizeof(int), sizeof(int)); sharedDataMinor->mMakeSharedData(sharedDataMinor, sizeof(int), sizeof(int));
sharedDataMinor->mSetWritableData(sharedDataMinor, &writableData, sizeof(int));
} }
if (nullptr != sharedDataPrimary) if (nullptr != sharedDataPrimary)
{ {
int readableData = -1; int readableData = -1;
sharedDataPrimary->mMakeSharedData(sharedDataPrimary, sizeof(int), sizeof(int)); sharedDataPrimary->mMakeSharedData(sharedDataPrimary, sizeof(int), sizeof(int));
sharedDataPrimary->mGetReadableDataPointer(sharedDataPrimary, &readableData, sizeof(int)); sharedDataPrimary->mGetReadableData(sharedDataPrimary, &readableData, sizeof(int));
LogInfo("readableData = %d\n", readableData); LogInfo("readableData = %d\n", readableData);
sharedDataPrimary->mFree(sharedDataPrimary); sharedDataPrimary->mFree(sharedDataPrimary);
} }
@ -44,4 +46,32 @@ namespace SharedDataTest
} }
ILogUnInit(); ILogUnInit();
} }
// ../output_files/test/bin/SharedDataTest --gtest_filter=SharedDataTest.Demo2
TEST(SharedDataTest, Demo2)
{
CreateLogModule();
ILogInit(LOG_INSTANCE_TYPE_END);
constexpr int PROJECT_ID = 9;
SharedData *sharedDataPrimary = CreateSharedData(SHARER_NAME_PRIMARY, "./shared_file", PROJECT_ID);
SharedData *sharedDataMinor = CreateSharedData(SHARER_NAME_MINOR, "./shared_file", PROJECT_ID);
if (nullptr != sharedDataMinor)
{
int writableData = 9;
IMakeSharedData(sharedDataMinor, sizeof(int), sizeof(int));
ISetWritableData(sharedDataMinor, &writableData, sizeof(int));
}
if (nullptr != sharedDataPrimary)
{
int readableData = -1;
IMakeSharedData(sharedDataPrimary, sizeof(int), sizeof(int));
IGetReadableData(sharedDataPrimary, &readableData, sizeof(int));
LogInfo("readableData = %d\n", readableData);
IFree(sharedDataPrimary);
}
if (nullptr != sharedDataMinor)
{
IFree(sharedDataMinor);
}
ILogUnInit();
}
} // namespace SharedDataTest } // namespace SharedDataTest

View File

@ -30,11 +30,33 @@ extern "C"
{ {
const StatusCode (*mMakeSharedData)(SharedData *, const unsigned int, const unsigned int); const StatusCode (*mMakeSharedData)(SharedData *, const unsigned int, const unsigned int);
const StatusCode (*mCleanSharedData)(SharedData *); const StatusCode (*mCleanSharedData)(SharedData *);
void (*mGetReadableDataPointer)(SharedData *, void *, const int); void (*mGetReadableData)(SharedData *, void *, const unsigned int);
void *(*mGetWritableDataPointer)(SharedData *); void (*mSetWritableData)(SharedData *, void *, const unsigned int);
void (*mFree)(void *); void (*mFree)(void *);
} SharedData; } SharedData;
SharedData *CreateSharedData(const SHARER_NAME name, const char *path, const int projectId); SharedData *CreateSharedData(const SHARER_NAME name, const char *path, const int projectId);
static inline const StatusCode IMakeSharedData(SharedData *object,
const unsigned int readableSize,
const unsigned int writableSize)
{
return object->mMakeSharedData(object, readableSize, writableSize);
}
static inline const StatusCode ICleanSharedData(SharedData *object)
{
return object->mCleanSharedData(object);
}
static inline void IGetReadableData(SharedData *object, void *buf, const unsigned int &bufLength)
{
object->mGetReadableData(object, buf, bufLength);
}
static inline void ISetWritableData(SharedData *object, void *buf, const unsigned int &bufLength)
{
object->mSetWritableData(object, buf, bufLength);
}
static inline void IFree(void *ptr)
{
((SharedData *)ptr)->mFree(ptr);
}
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@ -45,15 +45,6 @@ void SharedDataCpp::MakeSharedMemory(const unsigned int readableSize, const unsi
SharedMemory::MakeSharedMemory(SHARED_MEMORY_SIZE); SharedMemory::MakeSharedMemory(SHARED_MEMORY_SIZE);
mSharedMemeory = SharedMemory::GetMemory(); mSharedMemeory = SharedMemory::GetMemory();
WritableDataInit(); WritableDataInit();
// if (nullptr != mSharedMemeory)
// {
// UserDataHeader *writableHeader = (UserDataHeader *)((char *)mSharedMemeory + sizeof(UserDataHeader) + mPrimaryReadSize);
// memcpy(writableHeader->mUserName, USER_NAME_INIT_NAME, USER_NAME_BUF_LENGTH);
// }
// else
// {
// LogError("mSharedMemeory get failed.\n");
// }
} }
void SharedDataCpp::WritableDataInit(void) void SharedDataCpp::WritableDataInit(void)
{ {
@ -80,12 +71,7 @@ void SharedDataCpp::WritableDataInit(void)
} }
void SharedDataCpp::GetReadableMemory(void *buf, const unsigned int &bufLength) void SharedDataCpp::GetReadableMemory(void *buf, const unsigned int &bufLength)
{ {
if (bufLength > mPrimaryReadSize) if (SHARER_NAME_PRIMARY == mSharerName && bufLength == mPrimaryReadSize)
{
LogError("Get readable memory failed, buf length too large.\n");
return;
}
if (SHARER_NAME_PRIMARY == mSharerName)
{ {
if (memcmp((char *)mSharedMemeory, USER_NAME_INIT_NAME, USER_NAME_BUF_LENGTH) == 0) if (memcmp((char *)mSharedMemeory, USER_NAME_INIT_NAME, USER_NAME_BUF_LENGTH) == 0)
{ {
@ -96,7 +82,7 @@ void SharedDataCpp::GetReadableMemory(void *buf, const unsigned int &bufLength)
LogError("Readable memory didn't init yet.\n"); LogError("Readable memory didn't init yet.\n");
} }
} }
if (SHARER_NAME_MINOR == mSharerName) else if (SHARER_NAME_MINOR == mSharerName && bufLength == mMinorReadSize)
{ {
if (memcmp((char *)mSharedMemeory + sizeof(UserDataHeader) + mPrimaryReadSize, if (memcmp((char *)mSharedMemeory + sizeof(UserDataHeader) + mPrimaryReadSize,
USER_NAME_INIT_NAME, USER_NAME_INIT_NAME,
@ -111,6 +97,27 @@ void SharedDataCpp::GetReadableMemory(void *buf, const unsigned int &bufLength)
LogError("Readable memory didn't init yet.\n"); LogError("Readable memory didn't init yet.\n");
} }
} }
else
{
LogError("Get readable memory failed.\n");
}
}
void SharedDataCpp::SetWritableMemory(void *buf, const unsigned int &bufLength)
{
if (SHARER_NAME_PRIMARY == mSharerName && bufLength == mMinorReadSize)
{
memcpy((char *)mSharedMemeory + sizeof(UserDataHeader) * THERE_TWO_USER_DATA_HEADER + mPrimaryReadSize,
buf,
bufLength);
}
else if (SHARER_NAME_MINOR == mSharerName && bufLength == mPrimaryReadSize)
{
memcpy((char *)mSharedMemeory + sizeof(UserDataHeader), buf, bufLength);
}
else
{
LogError("Set writable memory failed.\n");
}
} }
static const StatusCode MakeSharedData(SharedData *object, const unsigned int readableSize, const unsigned int writableSize) static const StatusCode MakeSharedData(SharedData *object, const unsigned int readableSize, const unsigned int writableSize)
{ {
@ -118,11 +125,16 @@ static const StatusCode MakeSharedData(SharedData *object, const unsigned int re
impl->mSharedData->MakeSharedMemory(readableSize, writableSize); impl->mSharedData->MakeSharedMemory(readableSize, writableSize);
return CreateStatusCode(STATUS_CODE_OK); return CreateStatusCode(STATUS_CODE_OK);
} }
static void GetSharedReadableMemory(SharedData *object, void *buf, const int bufLength) static void GetSharedReadableMemory(SharedData *object, void *buf, const unsigned int bufLength)
{ {
SharedDataImpl *impl = ((SharedDataImpl *)(((char *)object) - sizeof(SharedDataHeader))); SharedDataImpl *impl = ((SharedDataImpl *)(((char *)object) - sizeof(SharedDataHeader)));
impl->mSharedData->GetReadableMemory(buf, bufLength); impl->mSharedData->GetReadableMemory(buf, bufLength);
} }
static void SetSharedWritableMemory(SharedData *object, void *buf, const unsigned int bufLength)
{
SharedDataImpl *impl = ((SharedDataImpl *)(((char *)object) - sizeof(SharedDataHeader)));
impl->mSharedData->SetWritableMemory(buf, bufLength);
}
static void SharedDataImplFree(void *ptr) static void SharedDataImplFree(void *ptr)
{ {
SharedDataImpl *object = ((SharedDataImpl *)(((char *)ptr) - sizeof(SharedDataHeader))); SharedDataImpl *object = ((SharedDataImpl *)(((char *)ptr) - sizeof(SharedDataHeader)));
@ -143,7 +155,8 @@ SharedData *NewSharedDataImpl(const SHARER_NAME &name, const char *path, const i
memcpy((void *)impl, (void *)&tmp, sizeof(SharedDataImpl)); memcpy((void *)impl, (void *)&tmp, sizeof(SharedDataImpl));
impl->mHeader.mCheckName = SHARED_DATA_NAME; impl->mHeader.mCheckName = SHARED_DATA_NAME;
impl->mBase.mMakeSharedData = MakeSharedData; impl->mBase.mMakeSharedData = MakeSharedData;
impl->mBase.mGetReadableDataPointer = GetSharedReadableMemory; impl->mBase.mGetReadableData = GetSharedReadableMemory;
impl->mBase.mSetWritableData = SetSharedWritableMemory;
impl->mBase.mFree = SharedDataImplFree; impl->mBase.mFree = SharedDataImplFree;
impl->mSharedData = std::make_shared<SharedDataCpp>(name, path, projectId); impl->mSharedData = std::make_shared<SharedDataCpp>(name, path, projectId);
return (SharedData *)(((char *)impl) + sizeof(SharedDataHeader)); return (SharedData *)(((char *)impl) + sizeof(SharedDataHeader));

View File

@ -41,6 +41,7 @@ public:
virtual ~SharedDataCpp() = default; virtual ~SharedDataCpp() = default;
void MakeSharedMemory(const unsigned int readableSize, const unsigned int writableSize); void MakeSharedMemory(const unsigned int readableSize, const unsigned int writableSize);
void GetReadableMemory(void *buf, const unsigned int &bufLength); void GetReadableMemory(void *buf, const unsigned int &bufLength);
void SetWritableMemory(void *buf, const unsigned int &bufLength);
private: private:
void WritableDataInit(void); void WritableDataInit(void);