OpenTTD Source: PacketWriter Struct Reference

OpenTTD Source 12.0-beta1

Public Member Functions | Data Fields
PacketWriter Struct Reference

Writing a savegame directly to a number of packets. More...

Inheritance diagram for PacketWriter:

## Public Member Functions
| PacketWriter (ServerNetworkGameSocketHandler *cs)
| Create the packet writer. More...
| ~PacketWriter ()
| Make sure everything is cleaned up.
void | Destroy ()
| Begin the destruction of this packet writer. More...
bool | TransferToNetworkQueue (ServerNetworkGameSocketHandler *socket)
| Transfer all packets from here to the network's queue while holding the lock on our mutex. More...
void | AppendQueue ()
| Append the current packet to the queue.
void | PrependQueue ()
| Prepend the current packet to the queue.
void | Write (byte *buf, size_t size) override
| Write a given number of bytes into the savegame. More...
void | Finish () override
| Prepare everything to finish writing the savegame.
Public Member Functions inherited from SaveFilter
| SaveFilter (SaveFilter *chain)
| Initialise this filter. More...
virtual | ~SaveFilter ()
| Make sure the writers are properly closed.

## Data Fields
ServerNetworkGameSocketHandler * | cs
| Socket we are associated with.
Packet * | current
| The packet we're currently writing to.
size_t | total_size
| Total size of the compressed savegame.
Packet * | packets
| Packet queue of the savegame; send these "slowly" to the client.
std::mutex | mutex
| Mutex for making threaded saving safe.
std::condition_variable | exit_sig
| Signal for threaded destruction of this packet writer.
Data Fields inherited from SaveFilter
SaveFilter * | chain
| Chained to the (savegame) filters.

## Detailed Description

Writing a savegame directly to a number of packets.

Definition at line 57 of file network_server.cpp.

## Constructor & Destructor Documentation

## ◆ PacketWriter()

PacketWriter::PacketWriter | ( | ServerNetworkGameSocketHandler * | cs | ) |
| inline

Create the packet writer.

Parameters

  cs | The socket handler we're making the packets for.

Definition at line 69 of file network_server.cpp.

## Member Function Documentation

## ◆ Destroy()

void PacketWriter::Destroy | ( |  | ) |
| inline

Begin the destruction of this packet writer.

It can happen in two ways: in the first case the client disconnected while saving the map. In this case the saving has not finished and killed this PacketWriter. In that case we simply set cs to nullptr, triggering the appending to fail due to the connection problem and eventually triggering the destructor. In the second case the destructor is already called, and it is waiting for our signal which we will send. Only then the packets will be removed by the destructor.

Definition at line 99 of file network_server.cpp.

References lock.

Referenced by ServerNetworkGameSocketHandler::~ServerNetworkGameSocketHandler().

## ◆ TransferToNetworkQueue()

bool PacketWriter::TransferToNetworkQueue | ( | ServerNetworkGameSocketHandler * | socket | ) |
| inline

Transfer all packets from here to the network's queue while holding the lock on our mutex.

Parameters

  socket | The network socket to write to.

Returns
  True iff the last packet of the map has been sent.

Definition at line 121 of file network_server.cpp.

References Packet::GetPacketType(), lock, PACKET_SERVER_MAP_DONE, Packet::PopFromQueue(), and NetworkTCPSocketHandler::SendPacket().

## ◆ Write()

void PacketWriter::Write | ( | byte * | buf,
|  | size_t | len
| ) |  |
| inlineoverridevirtual

Write a given number of bytes into the savegame.

Parameters

  buf | The bytes to write.
  len | The number of bytes to write.

Implements SaveFilter.

Definition at line 159 of file network_server.cpp.

References Packet::CanWriteToPacket(), lock, PACKET_SERVER_MAP_DATA, Packet::Send_bytes(), SlError(), and TCP_MTU.

The documentation for this struct was generated from the following file:

- src/network/network_server.cpp