1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-01-15 23:19:56 +00:00
openmw-tes3mp/components/openmw-mp/Packets/BasePacket.hpp

102 lines
2.5 KiB
C++
Raw Normal View History

#ifndef OPENMW_BASEPACKET_HPP
#define OPENMW_BASEPACKET_HPP
#include <string>
#include <RakNetTypes.h>
#include <BitStream.h>
#include <PacketPriority.h>
namespace mwmp
{
class BasePacket
{
public:
BasePacket(RakNet::RakPeerInterface *peer);
virtual ~BasePacket();
virtual void Packet(RakNet::BitStream *bs, bool send);
virtual void Send(bool toOtherPlayers = true);
virtual void Send(RakNet::AddressOrGUID destination);
virtual void Read();
void setGUID(RakNet::RakNetGUID guid);
RakNet::RakNetGUID getGUID();
void SetReadStream(RakNet::BitStream *bitStream);
void SetSendStream(RakNet::BitStream *bitStream);
void SetStreams(RakNet::BitStream *inStream, RakNet::BitStream *outStream);
virtual void RequestData(RakNet::RakNetGUID guid);
static size_t headerSize()
{
return (size_t)(1 + RakNet::RakNetGUID::size()); // packetID + RakNetGUID (uint64_t)
}
unsigned char GetPacketID()
{
return packetID;
}
protected:
template<class templateType>
void RW(templateType &data, unsigned int size, bool write)
{
if (write)
bs->Write(data, size);
else
bs->Read(data, size);
}
template<class templateType>
void RW(templateType &data, bool write)
{
if (write)
bs->Write(data);
else
bs->Read(data);
}
void RW(bool &data, bool write)
{
char _data;
if (write)
{
_data = data;
bs->Write(_data);
}
else
{
bs->Read(_data);
data = _data;
}
}
void RW(std::string &str, bool write)
{
if (write)
{
RakNet::RakString rstr(str.c_str());
bs->Write(rstr);
}
else
{
RakNet::RakString rstr;
bs->Read(rstr);
str = rstr.C_String();
}
}
protected:
unsigned char packetID;
PacketReliability reliability;
PacketPriority priority;
RakNet::BitStream *bsRead, *bsSend, *bs;
RakNet::RakPeerInterface *peer;
RakNet::RakNetGUID guid;
};
}
#endif //OPENMW_BASEPACKET_HPP