|
OpenTTD Source
14.0-beta3
|
Go to the documentation of this file.
12 #ifndef NETWORK_CORE_PACKET_H
13 #define NETWORK_CORE_PACKET_H
18 #include "../../string_type.h"
69 size_t Send_bytes (
const byte *begin,
const byte *end);
109 if (amount == 0)
return 0;
111 assert(this->pos < this->
buffer.size());
112 assert(this->pos + amount <= this->
buffer.size());
114 const char *output_buffer =
reinterpret_cast<const char*
>(this->buffer.data() + this->
pos);
115 ssize_t bytes = transfer_function(destination, output_buffer,
static_cast<A
>(amount), std::forward<Args>(args)...);
116 if (bytes > 0) this->pos += bytes;
135 template <
typename A = size_t,
typename F,
typename D,
typename ... Args>
136 ssize_t
TransferOut(F transfer_function, D destination, Args&& ... args)
138 return TransferOutWithLimit<A>(transfer_function, std::numeric_limits<size_t>::max(), destination, std::forward<Args>(args)...);
170 template <
typename A = size_t,
typename F,
typename S,
typename ... Args>
171 ssize_t
TransferIn(F transfer_function, S source, Args&& ... args)
174 if (amount == 0)
return 0;
176 assert(this->pos < this->
buffer.size());
177 assert(this->pos + amount <= this->
buffer.size());
179 char *input_buffer =
reinterpret_cast<char*
>(this->buffer.data() + this->
pos);
180 ssize_t bytes = transfer_function(source, input_buffer,
static_cast<A
>(amount), std::forward<Args>(args)...);
181 if (bytes > 0) this->pos += bytes;
uint64_t Recv_uint64()
Read a 64 bits integer from the packet.
void Send_uint64(uint64_t data)
Package a 64 bits integer in the packet.
void PrepareToSend()
Writes the packet size from the raw packet from packet->size.
size_t Size() const
Get the number of bytes in the packet.
SocketHandler for all network sockets in OpenTTD.
size_t Send_bytes(const byte *begin, const byte *end)
Send as many of the bytes as possible in the packet.
bool HasPacketSizeData() const
Check whether the packet, given the position of the "write" pointer, has read enough of the packet to...
uint8_t PacketType
Identifier for the packet.
ssize_t TransferOut(F transfer_function, D destination, Args &&... args)
Transfer data from the packet to the given function.
bool ParsePacketSize()
Reads the packet size from the raw packet and stores it in the packet->size.
bool CanReadFromPacket(size_t bytes_to_read, bool close_connection=false)
Is it safe to read from the packet, i.e.
std::string Recv_string(size_t length, StringValidationSettings settings=SVS_REPLACE_WITH_QUESTION_MARK)
Reads characters (bytes) from the packet until it finds a '\0', or reaches a maximum of length charac...
ssize_t TransferOutWithLimit(F transfer_function, size_t limit, D destination, Args &&... args)
Transfer data from the packet to the given function.
Packet(NetworkSocketHandler *cs, size_t limit, size_t initial_read_size=sizeof(PacketSize))
Create a packet that is used to read from a network socket.
void Send_uint32(uint32_t data)
Package a 32 bits integer in the packet.
void Send_uint8(uint8_t data)
Package a 8 bits integer in the packet.
uint32_t Recv_uint32()
Read a 32 bits integer from the packet.
void PrepareToRead()
Prepares the packet so it can be read.
void Send_buffer(const std::vector< byte > &data)
Copy a sized byte buffer into the packet.
fluid_settings_t * settings
FluidSynth settings handle.
std::vector< byte > Recv_buffer()
Extract a sized byte buffer from the packet.
ssize_t TransferIn(F transfer_function, S source, Args &&... args)
Transfer data from the given function into the packet.
Internal entity of a packet.
uint16_t PacketSize
Size of the whole packet.
StringValidationSettings
Settings for the string validation.
void Send_bool(bool data)
Package a boolean in the packet.
size_t limit
The limit for the packet size.
PacketType GetPacketType() const
Get the PacketType from this packet.
bool CanWriteToPacket(size_t bytes_to_write)
Is it safe to write to the packet, i.e.
bool Recv_bool()
Read a boolean from the packet.
NetworkSocketHandler * cs
Socket we're associated with.
static const size_t COMPAT_MTU
Number of bytes we can pack in a single packet for backward compatibility.
void Send_string(const std::string_view data)
Sends a string over the network.
std::vector< byte > buffer
The buffer of this packet.
uint16_t Recv_uint16()
Read a 16 bits integer from the packet.
size_t RemainingBytesToTransfer() const
Get the amount of bytes that are still available for the Transfer functions.
@ SVS_REPLACE_WITH_QUESTION_MARK
Replace the unknown/bad bits with question marks.
void Send_uint16(uint16_t data)
Package a 16 bits integer in the packet.
uint8_t Recv_uint8()
Read a 8 bits integer from the packet.
PacketSize pos
The current read/write position in the packet.