Packet.hpp
1 //
3 // SFML - Simple and Fast Multimedia Library
4 // Copyright (C) 2007-2018 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
31 #include <SFML/Network/Export.hpp>
32 #include <string>
33 #include <vector>
34 
35 
36 namespace sf
37 {
38 class String;
39 class TcpSocket;
40 class UdpSocket;
41 
47 class SFML_NETWORK_API Packet
48 {
49  // A bool-like type that cannot be converted to integer or pointer types
50  typedef bool (Packet::*BoolType)(std::size_t);
51 
52 public:
53 
60  Packet();
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 
131 public:
132 
171  operator BoolType() const;
172 
177  Packet& operator >>(bool& data);
178 
182  Packet& operator >>(Int8& data);
183 
187  Packet& operator >>(Uint8& data);
188 
192  Packet& operator >>(Int16& data);
193 
197  Packet& operator >>(Uint16& data);
198 
202  Packet& operator >>(Int32& data);
203 
207  Packet& operator >>(Uint32& data);
208 
212  Packet& operator >>(Int64& data);
213 
217  Packet& operator >>(Uint64& data);
218 
222  Packet& operator >>(float& data);
223 
227  Packet& operator >>(double& data);
228 
232  Packet& operator >>(char* data);
233 
237  Packet& operator >>(std::string& data);
238 
242  Packet& operator >>(wchar_t* data);
243 
247  Packet& operator >>(std::wstring& data);
248 
252  Packet& operator >>(String& data);
253 
258  Packet& operator <<(bool data);
259 
263  Packet& operator <<(Int8 data);
264 
268  Packet& operator <<(Uint8 data);
269 
273  Packet& operator <<(Int16 data);
274 
278  Packet& operator <<(Uint16 data);
279 
283  Packet& operator <<(Int32 data);
284 
288  Packet& operator <<(Uint32 data);
289 
293  Packet& operator <<(Int64 data);
294 
298  Packet& operator <<(Uint64 data);
299 
303  Packet& operator <<(float data);
304 
308  Packet& operator <<(double data);
309 
313  Packet& operator <<(const char* data);
314 
318  Packet& operator <<(const std::string& data);
319 
323  Packet& operator <<(const wchar_t* data);
324 
328  Packet& operator <<(const std::wstring& data);
329 
333  Packet& operator <<(const String& data);
334 
335 protected:
336 
337  friend class TcpSocket;
338  friend class UdpSocket;
339 
358  virtual const void* onSend(std::size_t& size);
359 
377  virtual void onReceive(const void* data, std::size_t size);
378 
379 private:
380 
385  bool operator ==(const Packet& right) const;
386  bool operator !=(const Packet& right) const;
387 
398  bool checkSize(std::size_t size);
399 
401  // Member data
403  std::vector<char> m_data;
404  std::size_t m_readPos;
405  std::size_t m_sendPos;
406  bool m_isValid;
407 };
408 
409 } // namespace sf
410 
411 
412 #endif // SFML_PACKET_HPP
413 
414 
Utility class to build blocks of data to transfer over the network.
Definition: Packet.hpp:48
virtual const void * onSend(std::size_t &size)
Called before the packet is sent over the network.
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.
virtual void onReceive(const void *data, std::size_t size)
Called after the packet is received over the network.
const void * getData() const
Get a pointer to the data contained in the packet.
virtual ~Packet()
Virtual destructor.
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