Added more error code to Packet class
This commit is contained in:
@@ -20,6 +20,10 @@ public:
|
|||||||
template<typename T>
|
template<typename T>
|
||||||
void AddPrimitive(T val)
|
void AddPrimitive(T val)
|
||||||
{
|
{
|
||||||
|
// Check if we are trying to add more than the package can fit.
|
||||||
|
if (m_MaxPacketSize < m_Offset + sizeof(T)) {
|
||||||
|
LOG_WARNING("Packet AddPrimitive(): You are trying to add more than we have allocated for!");
|
||||||
|
}
|
||||||
memcpy(m_Data + m_Offset, &val, sizeof(T));
|
memcpy(m_Data + m_Offset, &val, sizeof(T));
|
||||||
m_Offset += sizeof(T);
|
m_Offset += sizeof(T);
|
||||||
}
|
}
|
||||||
@@ -28,7 +32,7 @@ public:
|
|||||||
T PopFrontPrimitive()
|
T PopFrontPrimitive()
|
||||||
{
|
{
|
||||||
if (m_Offset < m_ReturnDataOffset + sizeof(T)) {
|
if (m_Offset < m_ReturnDataOffset + sizeof(T)) {
|
||||||
LOG_WARNING("Package PopFrontPrimitive(): You are trying to remove more than what exists in this package!");
|
LOG_WARNING("Packet PopFrontPrimitive(): You are trying to remove more than what exists in this package!");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
T returnValue;
|
T returnValue;
|
||||||
@@ -51,6 +55,7 @@ private:
|
|||||||
char* m_Data;
|
char* m_Data;
|
||||||
unsigned int m_ReturnDataOffset = 0;
|
unsigned int m_ReturnDataOffset = 0;
|
||||||
int m_Offset = 0;
|
int m_Offset = 0;
|
||||||
|
unsigned int m_MaxPacketSize = 128;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -16,7 +16,11 @@ Package::Package(MessageType type, unsigned int& packageID)
|
|||||||
Package::Package(char* data, const int sizeOfPackage)
|
Package::Package(char* data, const int sizeOfPackage)
|
||||||
{
|
{
|
||||||
// Create message
|
// Create message
|
||||||
|
|
||||||
|
// Resize message
|
||||||
|
m_MaxPacketSize = sizeOfPackage;
|
||||||
m_Data = new char[sizeOfPackage];
|
m_Data = new char[sizeOfPackage];
|
||||||
|
// Copy data newly allocated memory
|
||||||
memcpy(m_Data, data, sizeOfPackage);
|
memcpy(m_Data, data, sizeOfPackage);
|
||||||
m_Offset = sizeOfPackage;
|
m_Offset = sizeOfPackage;
|
||||||
}
|
}
|
||||||
@@ -29,14 +33,18 @@ Package::~Package()
|
|||||||
void Package::AddString(std::string str)
|
void Package::AddString(std::string str)
|
||||||
{
|
{
|
||||||
// Message, add one extra byte for null terminator
|
// Message, add one extra byte for null terminator
|
||||||
memcpy(m_Data + m_Offset, str.data(), (str.size() + 1) * sizeof(char));
|
int sizeOfString = str.size() + 1;
|
||||||
m_Offset += (str.size() + 1) * sizeof(char);
|
if (m_Offset + sizeOfString > m_MaxPacketSize) {
|
||||||
|
LOG_WARNING("Package::AddString(): Data size in packet exceeded maximum package size.\n");
|
||||||
|
}
|
||||||
|
memcpy(m_Data + m_Offset, str.data(), sizeOfString * sizeof(char));
|
||||||
|
m_Offset += sizeOfString * sizeof(char);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Package::AddData(char * data, int sizeOfData)
|
void Package::AddData(char * data, int sizeOfData)
|
||||||
{
|
{
|
||||||
if (m_Offset + sizeOfData > 128) {
|
if (m_Offset + sizeOfData > m_MaxPacketSize) {
|
||||||
LOG_WARNING("Package::AddData(): Data size in package exceeded maximum package size.\n");
|
LOG_WARNING("Package::AddData(): Data size in packet exceeded maximum package size.\n");
|
||||||
}
|
}
|
||||||
memcpy(m_Data + m_Offset, data, sizeOfData);
|
memcpy(m_Data + m_Offset, data, sizeOfData);
|
||||||
m_Offset += sizeOfData;
|
m_Offset += sizeOfData;
|
||||||
@@ -46,7 +54,7 @@ std::string Package::PopFrontString()
|
|||||||
{
|
{
|
||||||
std::string returnValue(m_Data + m_ReturnDataOffset);
|
std::string returnValue(m_Data + m_ReturnDataOffset);
|
||||||
if (m_Offset < m_ReturnDataOffset + returnValue.size()){
|
if (m_Offset < m_ReturnDataOffset + returnValue.size()){
|
||||||
LOG_WARNING("Package PopFrontString(): Oh no! You are trying to remove things outside my memory kingdom");
|
LOG_WARNING("packet PopFrontString(): Oh no! You are trying to remove things outside my memory kingdom");
|
||||||
return "PopFrontString Failed";
|
return "PopFrontString Failed";
|
||||||
}
|
}
|
||||||
// +1 for null terminator.
|
// +1 for null terminator.
|
||||||
@@ -56,6 +64,10 @@ std::string Package::PopFrontString()
|
|||||||
|
|
||||||
char * Package::PopData(int SizeOfData)
|
char * Package::PopData(int SizeOfData)
|
||||||
{
|
{
|
||||||
|
if (m_Offset < m_ReturnDataOffset + SizeOfData) {
|
||||||
|
LOG_WARNING("packet PopData(): Oh no! You are trying to remove things outside my memory kingdom");
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
unsigned int oldReturnDataOffset = m_ReturnDataOffset;
|
unsigned int oldReturnDataOffset = m_ReturnDataOffset;
|
||||||
m_ReturnDataOffset += SizeOfData;
|
m_ReturnDataOffset += SizeOfData;
|
||||||
return (m_Data + oldReturnDataOffset);
|
return (m_Data + oldReturnDataOffset);
|
||||||
|
|||||||
Reference in New Issue
Block a user