Loading...
Searching...
No Matches
Packet.hpp
Go to the documentation of this file.
1
2//
3// SFML - Simple and Fast Multimedia Library
4// Copyright (C) 2007-2016 Laurent Gomila (laurent@sfml-dev.org)
5//
6// This software is provided 'as-is', without any express or implied warranty.
7// In no event will the authors be held liable for any damages arising from the use of this software.
8//
9// Permission is granted to anyone to use this software for any purpose,
10// including commercial applications, and to alter it and redistribute it freely,
11// subject to the following restrictions:
12//
13// 1. The origin of this software must not be misrepresented;
14// you must not claim that you wrote the original software.
15// If you use this software in a product, an acknowledgment
16// in the product documentation would be appreciated but is not required.
17//
18// 2. Altered source versions must be plainly marked as such,
19// and must not be misrepresented as being the original software.
20//
21// 3. This notice may not be removed or altered from any source distribution.
22//
24
25#ifndef SFML_PACKET_HPP
26#define SFML_PACKET_HPP
27
29// Headers
32#include <string>
33#include <vector>
34
35
36namespace sf
37{
38class String;
39class TcpSocket;
40class UdpSocket;
41
48{
49 // A bool-like type that cannot be converted to integer or pointer types
50 typedef bool (Packet::*BoolType)(std::size_t);
51
52public:
53
61
66 virtual ~Packet();
67
77 void append(const void* data, std::size_t sizeInBytes);
78
87 void clear();
88
102 const void* getData() const;
103
115 std::size_t getDataSize() const;
116
129 bool endOfPacket() const;
130
131public:
132
171 operator BoolType() const;
172
177 Packet& operator >>(bool& data);
178 Packet& operator >>(Int8& data);
179 Packet& operator >>(Uint8& data);
180 Packet& operator >>(Int16& data);
181 Packet& operator >>(Uint16& data);
182 Packet& operator >>(Int32& data);
183 Packet& operator >>(Uint32& data);
184 Packet& operator >>(Int64& data);
185 Packet& operator >>(Uint64& data);
186 Packet& operator >>(float& data);
187 Packet& operator >>(double& data);
188 Packet& operator >>(char* data);
189 Packet& operator >>(std::string& data);
190 Packet& operator >>(wchar_t* data);
191 Packet& operator >>(std::wstring& data);
192 Packet& operator >>(String& data);
193
198 Packet& operator <<(bool data);
199 Packet& operator <<(Int8 data);
200 Packet& operator <<(Uint8 data);
201 Packet& operator <<(Int16 data);
202 Packet& operator <<(Uint16 data);
203 Packet& operator <<(Int32 data);
204 Packet& operator <<(Uint32 data);
205 Packet& operator <<(Int64 data);
206 Packet& operator <<(Uint64 data);
207 Packet& operator <<(float data);
208 Packet& operator <<(double data);
209 Packet& operator <<(const char* data);
210 Packet& operator <<(const std::string& data);
211 Packet& operator <<(const wchar_t* data);
212 Packet& operator <<(const std::wstring& data);
213 Packet& operator <<(const String& data);
214
215protected:
216
217 friend class TcpSocket;
218 friend class UdpSocket;
219
238 virtual const void* onSend(std::size_t& size);
239
257 virtual void onReceive(const void* data, std::size_t size);
258
259private:
260
265 bool operator ==(const Packet& right) const;
266 bool operator !=(const Packet& right) const;
267
278 bool checkSize(std::size_t size);
279
281 // Member data
283 std::vector<char> m_data;
284 std::size_t m_readPos;
285 std::size_t m_sendPos;
286 bool m_isValid;
287};
288
289} // namespace sf
290
291
292#endif // SFML_PACKET_HPP
293
294
#define SFML_NETWORK_API
std::size_t getDataSize() const
Get the size of the data contained in the packet.
void clear()
Clear the packet.
bool endOfPacket() const
Tell if the reading position has reached the end of the packet.
Packet()
Default constructor.
void append(const void *data, std::size_t sizeInBytes)
Append data to the end of the packet.
const void * getData() const
Get a pointer to the data contained in the packet.
friend class TcpSocket
Definition Packet.hpp:217
virtual void onReceive(const void *data, std::size_t size)
Called after the packet is received over the network.
virtual ~Packet()
Virtual destructor.
friend class UdpSocket
Definition Packet.hpp:218
virtual const void * onSend(std::size_t &size)
Called before the packet is sent over the network.
Utility string class that automatically handles conversions between types and encodings.
Definition String.hpp:46
Specialized socket using the TCP protocol.
Definition TcpSocket.hpp:47
Specialized socket using the UDP protocol.
Definition UdpSocket.hpp:46
signed long long Int64
Definition Config.hpp:224
unsigned short Uint16
Definition Config.hpp:213
signed short Int16
Definition Config.hpp:212
unsigned char Uint8
Definition Config.hpp:209
signed char Int8
Definition Config.hpp:208
unsigned int Uint32
Definition Config.hpp:217
signed int Int32
Definition Config.hpp:216
unsigned long long Uint64
Definition Config.hpp:225