#include "MscObject.h"
#include "MscError.h"
MscObject::MscObject(const char *objectID,MscTokenConnection *connection) :
mConnection(connection), mData(NULL), mDataLoaded(false), mAttributesLoaded(false)
{
::memcpy(mInfo.objectID,objectID,sizeof(mInfo.objectID));
}
MscObject::MscObject(const MSCObjectInfo& info,MscTokenConnection *connection) :
mInfo(info), mConnection(connection), mData(NULL), mDataLoaded(false), mAttributesLoaded(true)
{
}
MscObject::~MscObject()
{
if (mData)
free(mData);
}
void MscObject::create(const char *objectID,u_int32_t objectSize,const MscObjectACL& objectACL)
{
MSC_RV rv = MSCCreateObject(mConnection,const_cast<char *>(&Required(objectID)),objectSize,
const_cast<MSCObjectACL *>((MSCObjectACL *)&objectACL));
if (rv!=MSC_SUCCESS)
MscError::throwMe(rv);
}
void MscObject::deleteobj(const char *objectID,bool zeroFlag)
{
MSC_RV rv = MSCDeleteObject(mConnection,const_cast<char *>(&Required(objectID)),zeroFlag);
if (rv!=MSC_SUCCESS)
MscError::throwMe(rv);
}
void MscObject::read()
{
LPRWEventCallback rwCallback = NULL;
MSCPVoid32 addParams = NULL;
getAttributes();
if (mDataLoaded)
return;
MSCULong32 readSz = mInfo.size();
MSC_RV rv = MSCReadAllocateObject(mConnection, const_cast<char *>(mInfo.objid()),
reinterpret_cast<MSCPUChar8 *>(&mData),&readSz, rwCallback, addParams);
if (rv!=MSC_SUCCESS)
MscError::throwMe(rv);
mDataLoaded = true;
}
void MscObject::write(const char *dataToWrite,size_t dataSize)
{
MSCULong32 offset = 0;
LPRWEventCallback rwCallback = NULL;
MSCPVoid32 addParams = NULL;
MSC_RV rv = MSCWriteObject(mConnection, const_cast<char *>(mInfo.objid()), offset,
reinterpret_cast<unsigned char *>(const_cast<char *>(dataToWrite)),dataSize, rwCallback, addParams);
if (rv!=MSC_SUCCESS)
MscError::throwMe(rv);
mDataLoaded = false;
}
#ifdef _DEBUG_OSTREAM
std::ostream& operator << (std::ostream& strm, const MscObject& obj)
{
strm << "Obj: " << obj.mInfo;
return strm;
}
#endif
#pragma mark ---------------- Utility methods --------------
void MscObject::getAttributes(bool refresh)
{
if (refresh || !mAttributesLoaded)
{
(Required(mConnection)).getObjectAttributes(mInfo.objid(),mInfo);
mAttributesLoaded = true;
}
}