1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-17 12:03:07 +01:00
Files
OpenRCT2/src/openrct2/network/NetworkPacket.cpp
2020-08-03 00:36:02 +02:00

105 lines
2.2 KiB
C++

/*****************************************************************************
* Copyright (c) 2014-2020 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 is licensed under the GNU General Public License version 3.
*****************************************************************************/
#ifndef DISABLE_NETWORK
# include "NetworkPacket.h"
# include "NetworkTypes.h"
# include <memory>
NetworkPacket::NetworkPacket(NetworkCommand id)
: Header{ 0, id }
{
}
uint8_t* NetworkPacket::GetData()
{
return Data.data();
}
const uint8_t* NetworkPacket::GetData() const
{
return Data.data();
}
NetworkCommand NetworkPacket::GetCommand() const
{
return Header.Id;
}
void NetworkPacket::Clear()
{
BytesTransferred = 0;
BytesRead = 0;
Data.clear();
}
bool NetworkPacket::CommandRequiresAuth()
{
switch (GetCommand())
{
case NetworkCommand::Ping:
case NetworkCommand::Auth:
case NetworkCommand::Token:
case NetworkCommand::GameInfo:
case NetworkCommand::ObjectsList:
case NetworkCommand::MapRequest:
case NetworkCommand::Heartbeat:
return false;
default:
return true;
}
}
void NetworkPacket::Write(const void* bytes, size_t size)
{
const uint8_t* src = reinterpret_cast<const uint8_t*>(bytes);
Data.insert(Data.end(), src, src + size);
}
void NetworkPacket::WriteString(const utf8* string)
{
Write(reinterpret_cast<const uint8_t*>(string), strlen(string) + 1);
}
const uint8_t* NetworkPacket::Read(size_t size)
{
if (BytesRead + size > Header.Size)
{
return nullptr;
}
else
{
uint8_t* data = &GetData()[BytesRead];
BytesRead += size;
return data;
}
}
const utf8* NetworkPacket::ReadString()
{
char* str = reinterpret_cast<char*>(&GetData()[BytesRead]);
char* strend = str;
while (BytesRead < Header.Size && *strend != 0)
{
BytesRead++;
strend++;
}
if (*strend != 0)
{
return nullptr;
}
BytesRead++;
return str;
}
#endif