10#ifndef NETWORK_COORDINATOR_H
11#define NETWORK_COORDINATOR_H
56 std::map<std::string, std::pair<std::string, TCPServerConnecter *>, std::less<>>
connecter;
58 std::map<std::string, std::map<int, std::unique_ptr<ClientNetworkStunSocketHandler>>, std::less<>>
stun_handlers;
59 std::map<std::string, std::unique_ptr<ClientNetworkTurnSocketHandler>, std::less<>>
turn_handlers;
79 static constexpr std::chrono::seconds
IDLE_TIMEOUT = std::chrono::seconds(60);
89 void ConnectFailure(std::string_view token, uint8_t tracking_number);
91 void StunResult(std::string_view token, uint8_t family,
bool result);
104 void StartTurnConnection(std::string_view token);
Game Coordinator communication.
bool Receive_GC_NEWGRF_LOOKUP(Packet &p) override
Game Coordinator informs the client of updates for the NewGRFs lookup table as used by the NewGRF des...
GameInfoNewGRFLookupTable newgrf_lookup_table
Table to look up NewGRFs in the GC_LISTING packets.
bool Receive_GC_STUN_CONNECT(Packet &p) override
Game Coordinator informs the client/server of its STUN peer (the host:ip of the other side).
bool Receive_GC_STUN_REQUEST(Packet &p) override
Game Coordinator requests the client/server to do a STUN request to the STUN server.
void CloseTurnHandler(std::string_view token)
Close the TURN handler.
std::map< std::string, std::unique_ptr< ClientNetworkTurnSocketHandler >, std::less<> > turn_handlers
Pending TURN handler (if any), stored by token.
bool Receive_GC_REGISTER_ACK(Packet &p) override
Game Coordinator acknowledges the registration.
void Register()
Register our server to receive our invite code.
void ConnectToServer(std::string_view invite_code, TCPServerConnecter *connecter)
Join a server based on an invite code.
void CloseStunHandler(std::string_view token, uint8_t family=AF_UNSPEC)
Close the STUN handler.
std::map< std::string, std::pair< std::string, TCPServerConnecter * >, std::less<> > connecter
Based on tokens, the current (invite-code, connecter) that are pending.
uint32_t newgrf_lookup_table_cursor
Last received cursor for the GameInfoNewGRFLookupTable updates.
void SendReceive()
Check whether we received/can send some data from/to the Game Coordinator server and when that's the ...
static constexpr std::chrono::seconds IDLE_TIMEOUT
The idle timeout; when to close the connection because it's idle.
std::chrono::steady_clock::time_point next_update
When to send the next update (if server and public).
bool connecting
Are we connecting to the Game Coordinator?
void CloseAllConnections()
Close all pending connection tokens.
void SendServerUpdate()
Send an update of our server status to the Game Coordinator.
std::map< std::string, TCPServerConnecter *, std::less<> > connecter_pre
Based on invite codes, the current connecters that are pending.
bool Receive_GC_LISTING(Packet &p) override
Game Coordinator replies with a list of all public servers.
void ConnectFailure(std::string_view token, uint8_t tracking_number)
Callback from a Connecter to let the Game Coordinator know the connection failed.
void CloseToken(std::string_view token)
Close everything related to this connection token.
std::chrono::steady_clock::time_point last_activity
The last time there was network activity.
void StunResult(std::string_view token, uint8_t family, bool result)
Callback from the STUN connecter to inform the Game Coordinator about the result of the STUN.
bool Receive_GC_DIRECT_CONNECT(Packet &p) override
Game Coordinator requests that the Client makes a direct connection to the indicated peer,...
bool Receive_GC_CONNECTING(Packet &p) override
Game Coordinator informs the Client under what token it will start the attempt to connect the Server ...
bool Receive_GC_TURN_CONNECT(Packet &p) override
Game Coordinator requests that we make a connection to the indicated peer, which is a TURN server.
NetworkRecvStatus CloseConnection(bool error=true) override
This will put this socket handler in a close state.
void ConnectSuccess(std::string_view token, SOCKET sock, NetworkAddress &address)
Callback from a Connecter to let the Game Coordinator know the connection to the game server is estab...
bool Receive_GC_CONNECT_FAILED(Packet &p) override
Game Coordinator informs the Client that it failed to find a way to connect the Client to the Server.
bool Receive_GC_ERROR(Packet &p) override
Game Coordinator indicates there was an error.
std::map< std::string, std::map< int, std::unique_ptr< ClientNetworkStunSocketHandler > >, std::less<> > stun_handlers
All pending STUN handlers, stored by token:family.
std::shared_ptr< TCPConnecter > game_connecter
Pending connecter to the game server.
void GetListing()
Request a listing of all public servers.
Wrapper for (un)resolved network addresses; there's no reason to transform a numeric IP to a string a...
Base socket handler for all Game Coordinator TCP sockets.
SOCKET sock
The socket currently connected to.
NetworkRecvStatus
Status of a network client; reasons why a client has quit.
ClientNetworkCoordinatorSocketHandler _network_coordinator_client
The connection to the Game Coordinator.
Part of the network protocol handling STUN requests.
Part of the network protocol handling TURN requests.
Internal entity of a packet.
Basic functions to receive and send TCP packets to/from the Game Coordinator server.