// // Created by koncord on 05.01.16. // #ifndef OPENMW_BASEPACKET_HPP #define OPENMW_BASEPACKET_HPP #include #include #include #include #include namespace mwmp { class BasePacket { public: BasePacket(RakNet::RakPeerInterface *peer); ~BasePacket(); virtual void Packet(RakNet::BitStream *bs, BasePlayer *player, bool send); virtual void Send(BasePlayer *player, bool toOtherPlayers = true); virtual void Send(BasePlayer *player, RakNet::AddressOrGUID destination); virtual void Read(BasePlayer *player); virtual void RequestData(RakNet::RakNetGUID player); void SetReadStream(RakNet::BitStream *bitStream); void SetSendStream(RakNet::BitStream *bitStream); void SetStreams(RakNet::BitStream *inStream, RakNet::BitStream *outStream); size_t headerSize() { return 10; // 10 == char + char + RakNetGUID (uint64_t) } protected: template void RW(templateType &data, unsigned int size, bool write) { if (write) bs->Write(data, size); else bs->Read(data, size); } template 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) bs->Write(str.c_str()); else { char cstr[256]; bs->Read(cstr); str = cstr; } } protected: BasePlayer *player; unsigned char packetID; PacketReliability reliability; PacketPriority priority; private: RakNet::BitStream *bsRead, *bsSend, *bs; RakNet::RakPeerInterface *peer; }; } #endif //OPENMW_BASEPACKET_HPP