Codechange: make ClientStatus and ServerStatus scoped enums (#15578)

This commit is contained in:
Peter Nelson
2026-05-21 21:32:42 +01:00
committed by GitHub
parent b2e01a9afa
commit dbc0aa4cdb
7 changed files with 141 additions and 142 deletions
+1 -1
View File
@@ -71,7 +71,7 @@ void SetRandomSeed(uint32_t seed)
#ifdef RANDOM_DEBUG
uint32_t Random(const std::source_location location)
{
if (_networking && (!_network_server || (NetworkClientSocket::IsValidID(0) && NetworkClientSocket::Get(0)->status != NetworkClientSocket::STATUS_INACTIVE))) {
if (_networking && (!_network_server || (NetworkClientSocket::IsValidID(0) && NetworkClientSocket::Get(0)->status != NetworkClientSocket::ClientStatus::Inactive))) {
Debug(random, 0, "{:08x}; {:02x}; {:04x}; {:02x}; {}:{}", TimerGameEconomy::date, TimerGameEconomy::date_fract, _frame_counter, _current_company, location.file_name(), location.line());
}
+3 -3
View File
@@ -424,7 +424,7 @@ static void CheckPauseHelper(bool pause, PauseMode pm)
/**
* Counts the number of active clients connected.
* It has to be in STATUS_ACTIVE and not a spectator
* It has to be in \c ClientStatus::Active and not a spectator
* @return number of active clients
*/
static uint NetworkCountActiveClients()
@@ -432,7 +432,7 @@ static uint NetworkCountActiveClients()
uint count = 0;
for (const NetworkClientSocket *cs : NetworkClientSocket::Iterate()) {
if (cs->status != NetworkClientSocket::STATUS_ACTIVE) continue;
if (cs->status != NetworkClientSocket::ClientStatus::Active) continue;
if (!Company::IsValidID(cs->GetInfo()->client_playas)) continue;
count++;
}
@@ -460,7 +460,7 @@ static void CheckMinActiveClients()
static bool NetworkHasJoiningClient()
{
for (const NetworkClientSocket *cs : NetworkClientSocket::Iterate()) {
if (cs->status >= NetworkClientSocket::STATUS_AUTHORIZED && cs->status < NetworkClientSocket::STATUS_ACTIVE) return true;
if (cs->status >= NetworkClientSocket::ClientStatus::Authorized && cs->status < NetworkClientSocket::ClientStatus::Active) return true;
}
return false;
+35 -35
View File
@@ -289,7 +289,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendJoin()
Debug(net, 9, "Client::SendJoin()");
Debug(net, 9, "Client::status = JOIN");
my_client->status = STATUS_JOIN;
my_client->status = ServerStatus::Join;
Debug(net, 9, "Client::join_status = Authorizing");
_network_join_status = NetworkJoinStatus::Authorizing;
SetWindowDirty(WindowClass::NetworkStatus, NetworkStatusWindowNumber::Join);
@@ -354,7 +354,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendGetMap()
Debug(net, 9, "Client::SendGetMap()");
Debug(net, 9, "Client::status = MAP_WAIT");
my_client->status = STATUS_MAP_WAIT;
my_client->status = ServerStatus::MapWait;
auto p = std::make_unique<Packet>(my_client, PacketGameType::ClientGetMap);
my_client->SendPacket(std::move(p));
@@ -370,7 +370,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendMapOk()
Debug(net, 9, "Client::SendMapOk()");
Debug(net, 9, "Client::status = ACTIVE");
my_client->status = STATUS_ACTIVE;
my_client->status = ServerStatus::Active;
auto p = std::make_unique<Packet>(my_client, PacketGameType::ClientMapOk);
my_client->SendPacket(std::move(p));
@@ -518,7 +518,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::SendMove(CompanyID company)
*/
bool ClientNetworkGameSocketHandler::IsConnected()
{
return my_client != nullptr && my_client->status == STATUS_ACTIVE;
return my_client != nullptr && my_client->status == ServerStatus::Active;
}
@@ -563,7 +563,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerClientInfo(Packet
std::string name = p.Recv_string(NETWORK_NAME_LENGTH);
std::string public_key = p.Recv_string(NETWORK_PUBLIC_KEY_LENGTH);
if (this->status < STATUS_AUTHORIZED) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
if (this->status < ServerStatus::Authorized) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
if (this->HasClientQuit()) return NETWORK_RECV_STATUS_CLIENT_QUIT;
/* The server validates the name when receiving it from clients, so when it is wrong
* here something went really wrong. In the best case the packet got malformed on its
@@ -669,14 +669,14 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerError(Packet &p)
}
/* Perform an emergency save if we had already entered the game */
if (this->status == STATUS_ACTIVE) ClientNetworkEmergencySave();
if (this->status == ServerStatus::Active) ClientNetworkEmergencySave();
return NETWORK_RECV_STATUS_SERVER_ERROR;
}
NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerCheckNewGRFs(Packet &p)
{
if (this->status != STATUS_ENCRYPTED) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
if (this->status != ServerStatus::Encrypted) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
uint grf_count = p.Recv_uint8();
NetworkRecvStatus ret = NETWORK_RECV_STATUS_OKAY;
@@ -722,9 +722,9 @@ class ClientGamePasswordRequestHandler : public NetworkAuthenticationPasswordReq
NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerAuthenticationRequest(Packet &p)
{
if (this->status != STATUS_JOIN && this->status != STATUS_AUTH_GAME) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
if (this->status != ServerStatus::Join && this->status != ServerStatus::AuthGame) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
Debug(net, 9, "Client::status = AUTH_GAME");
this->status = STATUS_AUTH_GAME;
this->status = ServerStatus::AuthGame;
Debug(net, 9, "Client::ReceiveServerAuthenticationRequest()");
@@ -747,7 +747,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerAuthenticationReq
NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerEnableEncryption(Packet &p)
{
if (this->status != STATUS_AUTH_GAME || this->authentication_handler == nullptr) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
if (this->status != ServerStatus::AuthGame || this->authentication_handler == nullptr) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
Debug(net, 9, "Client::ReceiveServerEnableEncryption()");
@@ -758,16 +758,16 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerEnableEncryption(
this->authentication_handler = nullptr;
Debug(net, 9, "Client::status = ENCRYPTED");
this->status = STATUS_ENCRYPTED;
this->status = ServerStatus::Encrypted;
return this->SendIdentify();
}
NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerWelcome(Packet &p)
{
if (this->status < STATUS_ENCRYPTED || this->status >= STATUS_AUTHORIZED) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
if (this->status < ServerStatus::Encrypted || this->status >= ServerStatus::Authorized) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
Debug(net, 9, "Client::status = AUTHORIZED");
this->status = STATUS_AUTHORIZED;
this->status = ServerStatus::Authorized;
_network_own_client_id = (ClientID)p.Recv_uint32();
@@ -780,7 +780,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerWelcome(Packet &p
NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerWaitForMap(Packet &p)
{
/* We set the internal wait state when requesting the map. */
if (this->status != STATUS_MAP_WAIT) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
if (this->status != ServerStatus::MapWait) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
Debug(net, 9, "Client::ReceiveServerWaitForMap()");
@@ -795,9 +795,9 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerWaitForMap(Packet
NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerMapBegin(Packet &p)
{
if (this->status < STATUS_AUTHORIZED || this->status >= STATUS_MAP) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
if (this->status < ServerStatus::Authorized || this->status >= ServerStatus::Map) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
Debug(net, 9, "Client::status = MAP");
this->status = STATUS_MAP;
this->status = ServerStatus::Map;
if (this->savegame != nullptr) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
@@ -819,7 +819,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerMapBegin(Packet &
NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerMapSize(Packet &p)
{
if (this->status != STATUS_MAP) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
if (this->status != ServerStatus::Map) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
if (this->savegame == nullptr) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
_network_join_bytes_total = p.Recv_uint32();
@@ -832,7 +832,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerMapSize(Packet &p
NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerMapData(Packet &p)
{
if (this->status != STATUS_MAP) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
if (this->status != ServerStatus::Map) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
if (this->savegame == nullptr) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
/* We are still receiving data, put it to the file */
@@ -846,7 +846,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerMapData(Packet &p
NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerMapDone(Packet &)
{
if (this->status != STATUS_MAP) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
if (this->status != ServerStatus::Map) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
if (this->savegame == nullptr) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
Debug(net, 9, "Client::ReceiveServerMapDone()");
@@ -910,7 +910,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerMapDone(Packet &)
NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerFrame(Packet &p)
{
if (this->status != STATUS_ACTIVE) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
if (this->status != ServerStatus::Active) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
_frame_counter_server = p.Recv_uint32();
_frame_counter_max = p.Recv_uint32();
@@ -945,7 +945,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerFrame(Packet &p)
NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerSync(Packet &p)
{
if (this->status != STATUS_ACTIVE) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
if (this->status != ServerStatus::Active) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
_sync_frame = p.Recv_uint32();
_sync_seed_1 = p.Recv_uint32();
@@ -960,7 +960,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerSync(Packet &p)
NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerCommand(Packet &p)
{
if (this->status != STATUS_ACTIVE) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
if (this->status != ServerStatus::Active) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
CommandPacket cp;
auto err = this->ReceiveCommand(p, cp);
@@ -981,7 +981,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerCommand(Packet &p
NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerChat(Packet &p)
{
if (this->status != STATUS_ACTIVE) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
if (this->status != ServerStatus::Active) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
std::string name;
const NetworkClientInfo *ci = nullptr, *ci_to;
@@ -1031,7 +1031,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerChat(Packet &p)
NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerExternalChat(Packet &p)
{
if (this->status != STATUS_ACTIVE) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
if (this->status != ServerStatus::Active) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
std::string source = p.Recv_string(NETWORK_CHAT_LENGTH);
ExtendedTextColour colour = ExtendedTextColour::FromNetwork(p.Recv_uint16());
@@ -1049,7 +1049,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerExternalChat(Pack
NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerErrorQuit(Packet &p)
{
if (this->status < STATUS_AUTHORIZED) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
if (this->status < ServerStatus::Authorized) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
ClientID client_id = (ClientID)p.Recv_uint32();
@@ -1068,7 +1068,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerErrorQuit(Packet
NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerQuit(Packet &p)
{
if (this->status < STATUS_AUTHORIZED) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
if (this->status < ServerStatus::Authorized) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
ClientID client_id = (ClientID)p.Recv_uint32();
@@ -1090,7 +1090,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerQuit(Packet &p)
NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerClientJoined(Packet &p)
{
if (this->status < STATUS_AUTHORIZED) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
if (this->status < ServerStatus::Authorized) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
ClientID client_id = (ClientID)p.Recv_uint32();
@@ -1112,11 +1112,11 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerShutdown(Packet &
/* Only when we're trying to join we really
* care about the server shutting down. */
if (this->status >= STATUS_JOIN) {
if (this->status >= ServerStatus::Join) {
ShowErrorMessage(GetEncodedString(STR_NETWORK_MESSAGE_SERVER_SHUTDOWN), {}, WL_CRITICAL);
}
if (this->status == STATUS_ACTIVE) ClientNetworkEmergencySave();
if (this->status == ServerStatus::Active) ClientNetworkEmergencySave();
return NETWORK_RECV_STATUS_SERVER_ERROR;
}
@@ -1127,7 +1127,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerNewGame(Packet &)
/* Only when we're trying to join we really
* care about the server shutting down. */
if (this->status >= STATUS_JOIN) {
if (this->status >= ServerStatus::Join) {
/* To throttle the reconnects a bit, every clients waits its
* Client ID modulo 16 + 1 (value 0 means no reconnect).
* This way reconnects should be spread out a bit. */
@@ -1135,14 +1135,14 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerNewGame(Packet &)
ShowErrorMessage(GetEncodedString(STR_NETWORK_MESSAGE_SERVER_REBOOT), {}, WL_CRITICAL);
}
if (this->status == STATUS_ACTIVE) ClientNetworkEmergencySave();
if (this->status == ServerStatus::Active) ClientNetworkEmergencySave();
return NETWORK_RECV_STATUS_SERVER_ERROR;
}
NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerRemoteConsoleCommand(Packet &p)
{
if (this->status < STATUS_AUTHORIZED) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
if (this->status < ServerStatus::Authorized) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
Debug(net, 9, "Client::ReceiveServerRemoteConsoleCommand()");
@@ -1158,7 +1158,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerRemoteConsoleComm
NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerMove(Packet &p)
{
if (this->status < STATUS_AUTHORIZED) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
if (this->status < ServerStatus::Authorized) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
/* Nothing more in this packet... */
ClientID client_id = (ClientID)p.Recv_uint32();
@@ -1188,7 +1188,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerMove(Packet &p)
NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerConfigurationUpdate(Packet &p)
{
if (this->status < STATUS_ACTIVE) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
if (this->status < ServerStatus::Active) return NETWORK_RECV_STATUS_MALFORMED_PACKET;
_network_server_max_companies = p.Recv_uint8();
_network_server_name = p.Recv_string(NETWORK_NAME_LENGTH);
@@ -1206,7 +1206,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::ReceiveServerConfigurationUpda
void ClientNetworkGameSocketHandler::CheckConnection()
{
/* Only once we're authorized we can expect a steady stream of packets. */
if (this->status < STATUS_AUTHORIZED) return;
if (this->status < ServerStatus::Authorized) return;
/* 5 seconds are roughly twice the server's "you're slow" threshold (1 game day). */
std::chrono::steady_clock::duration lag = std::chrono::steady_clock::now() - this->last_packet;
+12 -12
View File
@@ -21,20 +21,20 @@ private:
uint8_t token = 0; ///< The token we need to send back to the server to prove we're the right client.
/** Status of the connection with the server. */
enum ServerStatus : uint8_t {
STATUS_INACTIVE, ///< The client is not connected nor active.
STATUS_JOIN, ///< We are trying to join a server.
STATUS_AUTH_GAME, ///< Last action was requesting game (server) password.
STATUS_ENCRYPTED, ///< The game authentication has completed and from here on the connection to the server is encrypted.
STATUS_NEWGRFS_CHECK, ///< Last action was checking NewGRFs.
STATUS_AUTHORIZED, ///< The client is authorized at the server.
STATUS_MAP_WAIT, ///< The client is waiting as someone else is downloading the map.
STATUS_MAP, ///< The client is downloading the map.
STATUS_ACTIVE, ///< The client is active within in the game.
STATUS_END, ///< Must ALWAYS be on the end of this list!! (period)
enum class ServerStatus : uint8_t {
Inactive, ///< The client is not connected nor active.
Join, ///< We are trying to join a server.
AuthGame, ///< Last action was requesting game (server) password.
Encrypted, ///< The game authentication has completed and from here on the connection to the server is encrypted.
NewGRFsCheck, ///< Last action was checking NewGRFs.
Authorized, ///< The client is authorized at the server.
MapWait, ///< The client is waiting as someone else is downloading the map.
Map, ///< The client is downloading the map.
Active, ///< The client is active within in the game.
End, ///< Must ALWAYS be on the end of this list!! (period)
};
ServerStatus status = STATUS_INACTIVE; ///< Status of the connection with the server.
ServerStatus status = ServerStatus::Inactive; ///< Status of the connection with the server.
protected:
friend void NetworkExecuteLocalCommandQueue();
+1 -1
View File
@@ -304,7 +304,7 @@ static void DistributeCommandPacket(CommandPacket &cp, const NetworkClientSocket
cp.frame = _frame_counter_max + 1;
for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) {
if (cs->status >= NetworkClientSocket::STATUS_MAP) {
if (cs->status >= NetworkClientSocket::ClientStatus::Map) {
/* Callbacks are only send back to the client who sent them in the
* first place. This filters that out. */
cp.callback = (cs != owner) ? nullptr : callback;
+76 -77
View File
@@ -246,7 +246,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::CloseConnection(NetworkRecvSta
*/
if (this->IsPendingDeletion() || this->sock == INVALID_SOCKET) return status;
if (status != NETWORK_RECV_STATUS_CLIENT_QUIT && status != NETWORK_RECV_STATUS_SERVER_ERROR && !this->HasClientQuit() && this->status >= STATUS_AUTHORIZED) {
if (status != NETWORK_RECV_STATUS_CLIENT_QUIT && status != NETWORK_RECV_STATUS_SERVER_ERROR && !this->HasClientQuit() && this->status >= ClientStatus::Authorized) {
/* We did not receive a leave message from this client... */
std::string client_name = this->GetClientName();
@@ -254,7 +254,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::CloseConnection(NetworkRecvSta
/* Inform other clients of this... strange leaving ;) */
for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) {
if (new_cs->status >= STATUS_AUTHORIZED && this != new_cs) {
if (new_cs->status >= ClientStatus::Authorized && this != new_cs) {
new_cs->SendErrorQuit(this->client_id, NetworkErrorCode::ConnectionLost);
}
}
@@ -262,7 +262,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::CloseConnection(NetworkRecvSta
/* If we were transferring a map to this client, stop the savegame creation
* process and queue the next client to receive the map. */
if (this->status == STATUS_MAP) {
if (this->status == ClientStatus::Map) {
/* Ensure the saving of the game is stopped too. */
this->savegame->Destroy();
this->savegame = nullptr;
@@ -274,7 +274,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::CloseConnection(NetworkRecvSta
Debug(net, 3, "[{}] Client #{} closed connection", ServerNetworkGameSocketHandler::GetName(), this->client_id);
/* We just lost one client :( */
if (this->status >= STATUS_AUTHORIZED) _network_game_info.clients_on--;
if (this->status >= ClientStatus::Authorized) _network_game_info.clients_on--;
extern uint8_t _network_clients_connected;
_network_clients_connected--;
@@ -306,7 +306,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::CloseConnection(NetworkRecvSta
{
for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) {
if (cs->writable) {
if (cs->SendPackets() != SPS_CLOSED && cs->status == STATUS_MAP) {
if (cs->SendPackets() != SPS_CLOSED && cs->status == ClientStatus::Map) {
/* This client is in the middle of a map-send, call the function for that */
cs->SendMap();
}
@@ -376,7 +376,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendError(NetworkErrorCode err
StringID strid = GetNetworkErrorMsg(error);
/* Only send when the current client was in game */
if (this->status >= STATUS_AUTHORIZED) {
if (this->status >= ClientStatus::Authorized) {
std::string client_name = this->GetClientName();
Debug(net, 1, "'{}' made an error and has been disconnected: {}", client_name, GetString(strid));
@@ -388,7 +388,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendError(NetworkErrorCode err
}
for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) {
if (new_cs->status >= STATUS_AUTHORIZED && new_cs != this) {
if (new_cs->status >= ClientStatus::Authorized && new_cs != this) {
/* Some errors we filter to a more general error. Clients don't have to know the real
* reason a joining failed. */
if (error == NetworkErrorCode::NotAuthorized || error == NetworkErrorCode::NotExpected || error == NetworkErrorCode::WrongRevision) {
@@ -415,11 +415,11 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendNewGRFCheck()
{
Debug(net, 9, "client[{}] SendNewGRFCheck()", this->client_id);
/* Invalid packet when status is anything but STATUS_IDENTIFY. */
if (this->status != STATUS_IDENTIFY) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET);
/* Invalid packet when status is anything but ClientStatus::Identify. */
if (this->status != ClientStatus::Identify) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET);
Debug(net, 9, "client[{}] status = NEWGRFS_CHECK", this->client_id);
this->status = STATUS_NEWGRFS_CHECK;
this->status = ClientStatus::NewGRFsCheck;
if (_grfconfig.empty()) {
/* There are no NewGRFs, so they're welcome. */
@@ -447,11 +447,11 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendAuthRequest()
{
Debug(net, 9, "client[{}] SendAuthRequest()", this->client_id);
/* Invalid packet when status is anything but STATUS_INACTIVE or STATUS_AUTH_GAME. */
if (this->status != STATUS_INACTIVE && status != STATUS_AUTH_GAME) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET);
/* Invalid packet when status is anything but ClientStatus::Inactive or ClientStatus::AuthGame. */
if (this->status != ClientStatus::Inactive && status != ClientStatus::AuthGame) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET);
Debug(net, 9, "client[{}] status = AUTH_GAME", this->client_id);
this->status = STATUS_AUTH_GAME;
this->status = ClientStatus::AuthGame;
/* Reset 'lag' counters */
this->last_frame = this->last_frame_server = _frame_counter;
@@ -475,8 +475,8 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendEnableEncryption()
{
Debug(net, 9, "client[{}] SendEnableEncryption()", this->client_id);
/* Invalid packet when status is anything but STATUS_AUTH_GAME. */
if (this->status != STATUS_AUTH_GAME) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET);
/* Invalid packet when status is anything but ClientStatus::AuthGame. */
if (this->status != ClientStatus::AuthGame) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET);
auto p = std::make_unique<Packet>(this, PacketGameType::ServerEnableEncryption);
this->authentication_handler->SendEnableEncryption(*p);
@@ -492,11 +492,11 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendWelcome()
{
Debug(net, 9, "client[{}] SendWelcome()", this->client_id);
/* Invalid packet when status is anything but STATUS_NEWGRFS_CHECK. */
if (this->status != STATUS_NEWGRFS_CHECK) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET);
/* Invalid packet when status is anything but ClientStatus::NewGRFsCheck. */
if (this->status != ClientStatus::NewGRFsCheck) return this->CloseConnection(NETWORK_RECV_STATUS_MALFORMED_PACKET);
Debug(net, 9, "client[{}] status = AUTHORIZED", this->client_id);
this->status = STATUS_AUTHORIZED;
this->status = ClientStatus::Authorized;
/* Reset 'lag' counters */
this->last_frame = this->last_frame_server = _frame_counter;
@@ -509,7 +509,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendWelcome()
/* Transmit info about all the active clients */
for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) {
if (new_cs != this && new_cs->status >= STATUS_AUTHORIZED) {
if (new_cs != this && new_cs->status >= ClientStatus::Authorized) {
this->SendClientInfo(new_cs->GetInfo());
}
}
@@ -529,7 +529,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendWait()
/* Count how many clients are waiting in the queue, in front of you! */
for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) {
if (new_cs->status != STATUS_MAP_WAIT) continue;
if (new_cs->status != ClientStatus::MapWait) continue;
if (new_cs->GetInfo()->join_date < this->GetInfo()->join_date || (new_cs->GetInfo()->join_date == this->GetInfo()->join_date && new_cs->client_id < this->client_id)) waiting++;
}
@@ -552,7 +552,7 @@ void ServerNetworkGameSocketHandler::CheckNextClientToSendMap(NetworkClientSocke
for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) {
if (ignore_cs == new_cs) continue;
if (new_cs->status == STATUS_MAP_WAIT) {
if (new_cs->status == ClientStatus::MapWait) {
if (best == nullptr || best->GetInfo()->join_date > new_cs->GetInfo()->join_date || (best->GetInfo()->join_date == new_cs->GetInfo()->join_date && best->client_id > new_cs->client_id)) {
best = new_cs;
}
@@ -562,12 +562,12 @@ void ServerNetworkGameSocketHandler::CheckNextClientToSendMap(NetworkClientSocke
/* Is there someone else to join? */
if (best != nullptr) {
/* Let the first start joining. */
best->status = STATUS_AUTHORIZED;
best->status = ClientStatus::Authorized;
best->SendMap();
/* And update the rest. */
for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) {
if (new_cs->status == STATUS_MAP_WAIT) new_cs->SendWait();
if (new_cs->status == ClientStatus::MapWait) new_cs->SendWait();
}
}
}
@@ -578,12 +578,12 @@ void ServerNetworkGameSocketHandler::CheckNextClientToSendMap(NetworkClientSocke
*/
NetworkRecvStatus ServerNetworkGameSocketHandler::SendMap()
{
if (this->status < STATUS_AUTHORIZED) {
if (this->status < ClientStatus::Authorized) {
/* Illegal call, return error and ignore the packet */
return this->SendError(NetworkErrorCode::IllegalPacket);
}
if (this->status == STATUS_AUTHORIZED) {
if (this->status == ClientStatus::Authorized) {
Debug(net, 9, "client[{}] SendMap(): first_packet", this->client_id);
WaitTillSaved();
@@ -596,7 +596,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMap()
NetworkSyncCommandQueue(this);
Debug(net, 9, "client[{}] status = MAP", this->client_id);
this->status = STATUS_MAP;
this->status = ClientStatus::Map;
/* Mark the start of download */
this->last_frame = _frame_counter;
this->last_frame_server = _frame_counter;
@@ -605,7 +605,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMap()
if (SaveWithFilter(this->savegame, true) != SaveLoadResult::Ok) UserError("network savedump failed");
}
if (this->status == STATUS_MAP) {
if (this->status == ClientStatus::Map) {
bool last_packet = this->savegame->TransferToNetworkQueue();
if (last_packet) {
Debug(net, 9, "client[{}] SendMap(): last_packet", this->client_id);
@@ -617,7 +617,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendMap()
/* Set the status to DONE_MAP, no we will wait for the client
* to send it is ready (maybe that happens like never ;)) */
Debug(net, 9, "client[{}] status = DONE_MAP", this->client_id);
this->status = STATUS_DONE_MAP;
this->status = ClientStatus::DoneMap;
this->CheckNextClientToSendMap();
}
@@ -719,7 +719,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendChat(NetworkAction action,
{
Debug(net, 9, "client[{}] SendChat(): action={}, client_id={}, self_send={}", this->client_id, action, client_id, self_send);
if (this->status < STATUS_PRE_ACTIVE) return NETWORK_RECV_STATUS_OKAY;
if (this->status < ClientStatus::PreActive) return NETWORK_RECV_STATUS_OKAY;
auto p = std::make_unique<Packet>(this, PacketGameType::ServerChat);
@@ -745,7 +745,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::SendExternalChat(std::string_v
{
Debug(net, 9, "client[{}] SendExternalChat(): source={}", this->client_id, source);
if (this->status < STATUS_PRE_ACTIVE) return NETWORK_RECV_STATUS_OKAY;
if (this->status < ClientStatus::PreActive) return NETWORK_RECV_STATUS_OKAY;
auto p = std::make_unique<Packet>(this, PacketGameType::ServerExternalChat);
@@ -885,7 +885,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientGameInfo(Packet &
NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientNewGRFsChecked(Packet &)
{
if (this->status != STATUS_NEWGRFS_CHECK) {
if (this->status != ClientStatus::NewGRFsCheck) {
/* Illegal call, return error and ignore the packet */
return this->SendError(NetworkErrorCode::NotExpected);
}
@@ -897,7 +897,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientNewGRFsChecked(Pa
NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientJoin(Packet &p)
{
if (this->status != STATUS_INACTIVE) {
if (this->status != ClientStatus::Inactive) {
/* Illegal call, return error and ignore the packet */
return this->SendError(NetworkErrorCode::NotExpected);
}
@@ -923,7 +923,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientJoin(Packet &p)
NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientIdentify(Packet &p)
{
if (this->status != STATUS_IDENTIFY) return this->SendError(NetworkErrorCode::NotExpected);
if (this->status != ClientStatus::Identify) return this->SendError(NetworkErrorCode::NotExpected);
Debug(net, 9, "client[{}] ReceiveClientIdentify()", this->client_id);
@@ -1002,7 +1002,7 @@ static NetworkErrorCode GetErrorForAuthenticationMethod(NetworkAuthenticationMet
NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientAuthenticationResponse(Packet &p)
{
if (this->status != STATUS_AUTH_GAME) {
if (this->status != ClientStatus::AuthGame) {
return this->SendError(NetworkErrorCode::NotExpected);
}
@@ -1030,7 +1030,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientAuthenticationRes
this->authentication_handler = nullptr;
Debug(net, 9, "client[{}] status = IDENTIFY", this->client_id);
this->status = STATUS_IDENTIFY;
this->status = ClientStatus::Identify;
/* Reset 'lag' counters */
this->last_frame = this->last_frame_server = _frame_counter;
@@ -1042,7 +1042,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientGetMap(Packet &)
{
/* The client was never joined.. so this is impossible, right?
* Ignore the packet, give the client a warning, and close the connection */
if (this->status < STATUS_AUTHORIZED || this->HasClientQuit()) {
if (this->status < ClientStatus::Authorized || this->HasClientQuit()) {
return this->SendError(NetworkErrorCode::NotAuthorized);
}
@@ -1050,10 +1050,10 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientGetMap(Packet &)
/* Check if someone else is receiving the map */
for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) {
if (new_cs->status == STATUS_MAP) {
if (new_cs->status == ClientStatus::Map) {
/* Tell the new client to wait */
Debug(net, 9, "client[{}] status = MAP_WAIT", this->client_id);
this->status = STATUS_MAP_WAIT;
this->status = ClientStatus::MapWait;
return this->SendWait();
}
}
@@ -1065,7 +1065,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientGetMap(Packet &)
NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientMapOk(Packet &)
{
/* Client has the map, now start syncing */
if (this->status == STATUS_DONE_MAP && !this->HasClientQuit()) {
if (this->status == ClientStatus::DoneMap && !this->HasClientQuit()) {
Debug(net, 9, "client[{}] ReceiveClientMapOk()", this->client_id);
std::string client_name = this->GetClientName();
@@ -1078,7 +1078,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientMapOk(Packet &)
/* Mark the client as pre-active, and wait for an ACK
* so we know it is done loading and in sync with us */
Debug(net, 9, "client[{}] status = PRE_ACTIVE", this->client_id);
this->status = STATUS_PRE_ACTIVE;
this->status = ClientStatus::PreActive;
NetworkHandleCommandQueue(this);
this->SendFrame();
this->SendSync();
@@ -1089,7 +1089,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientMapOk(Packet &)
this->last_frame_server = _frame_counter;
for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) {
if (new_cs->status >= STATUS_AUTHORIZED) {
if (new_cs->status >= ClientStatus::Authorized) {
new_cs->SendClientInfo(this->GetInfo());
new_cs->SendJoin(this->client_id);
}
@@ -1109,7 +1109,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientCommand(Packet &p
{
/* The client was never joined.. so this is impossible, right?
* Ignore the packet, give the client a warning, and close the connection */
if (this->status < STATUS_DONE_MAP || this->HasClientQuit()) {
if (this->status < ClientStatus::DoneMap || this->HasClientQuit()) {
return this->SendError(NetworkErrorCode::NotExpected);
}
@@ -1200,7 +1200,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientError(Packet &p)
Debug(net, 9, "client[{}] ReceiveClientError(): errorno={}", this->client_id, errorno);
/* The client was never joined.. thank the client for the packet, but ignore it */
if (this->status < STATUS_DONE_MAP || this->HasClientQuit()) {
if (this->status < ClientStatus::DoneMap || this->HasClientQuit()) {
return this->CloseConnection(NETWORK_RECV_STATUS_CLIENT_QUIT);
}
@@ -1212,7 +1212,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientError(Packet &p)
NetworkTextMessage(NetworkAction::ClientLeave, CC_DEFAULT, false, client_name, "", strid);
for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) {
if (new_cs->status >= STATUS_AUTHORIZED) {
if (new_cs->status >= ClientStatus::Authorized) {
new_cs->SendErrorQuit(this->client_id, errorno);
}
}
@@ -1225,7 +1225,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientError(Packet &p)
NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientQuit(Packet &)
{
/* The client was never joined.. thank the client for the packet, but ignore it */
if (this->status < STATUS_DONE_MAP || this->HasClientQuit()) {
if (this->status < ClientStatus::DoneMap || this->HasClientQuit()) {
return this->CloseConnection(NETWORK_RECV_STATUS_CLIENT_QUIT);
}
@@ -1236,7 +1236,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientQuit(Packet &)
NetworkTextMessage(NetworkAction::ClientLeave, CC_DEFAULT, false, client_name, "", STR_NETWORK_MESSAGE_CLIENT_LEAVING);
for (NetworkClientSocket *new_cs : NetworkClientSocket::Iterate()) {
if (new_cs->status >= STATUS_AUTHORIZED && new_cs != this) {
if (new_cs->status >= ClientStatus::Authorized && new_cs != this) {
new_cs->SendQuit(this->client_id);
}
}
@@ -1248,7 +1248,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientQuit(Packet &)
NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientAck(Packet &p)
{
if (this->status < STATUS_AUTHORIZED) {
if (this->status < ClientStatus::Authorized) {
/* Illegal call, return error and ignore the packet */
return this->SendError(NetworkErrorCode::NotAuthorized);
}
@@ -1258,13 +1258,13 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientAck(Packet &p)
Debug(net, 9, "client[{}] ReceiveClientAck(): frame={}", this->client_id, frame);
/* The client is trying to catch up with the server */
if (this->status == STATUS_PRE_ACTIVE) {
if (this->status == ClientStatus::PreActive) {
/* The client is not yet caught up? */
if (frame + Ticks::DAY_TICKS < _frame_counter) return NETWORK_RECV_STATUS_OKAY;
/* Now it is! Unpause the game */
Debug(net, 9, "client[{}] status = ACTIVE", this->client_id);
this->status = STATUS_ACTIVE;
this->status = ClientStatus::Active;
this->last_token_frame = _frame_counter;
/* Execute script for, e.g. MOTD */
@@ -1325,7 +1325,7 @@ void NetworkServerSendChat(NetworkAction action, NetworkChatDestinationType dest
} else {
/* Else find the client to send the message to */
for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) {
if (cs->client_id == (ClientID)dest && cs->status >= ServerNetworkGameSocketHandler::STATUS_AUTHORIZED) {
if (cs->client_id == (ClientID)dest && cs->status >= ServerNetworkGameSocketHandler::ClientStatus::Authorized) {
cs->SendChat(action, from_id, false, msg, data);
break;
}
@@ -1342,7 +1342,7 @@ void NetworkServerSendChat(NetworkAction action, NetworkChatDestinationType dest
}
} else {
for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) {
if (cs->client_id == from_id && cs->status >= ServerNetworkGameSocketHandler::STATUS_AUTHORIZED) {
if (cs->client_id == from_id && cs->status >= ServerNetworkGameSocketHandler::ClientStatus::Authorized) {
cs->SendChat(action, (ClientID)dest, true, msg, data);
break;
}
@@ -1357,7 +1357,7 @@ void NetworkServerSendChat(NetworkAction action, NetworkChatDestinationType dest
ci_to = nullptr;
for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) {
ci = cs->GetInfo();
if (ci != nullptr && ci->client_playas == (CompanyID)dest && cs->status >= ServerNetworkGameSocketHandler::STATUS_AUTHORIZED) {
if (ci != nullptr && ci->client_playas == (CompanyID)dest && cs->status >= ServerNetworkGameSocketHandler::ClientStatus::Authorized) {
cs->SendChat(action, from_id, false, msg, data);
if (cs->client_id == from_id) show_local = false;
ci_to = ci; // Remember a client that is in the company for company-name
@@ -1388,7 +1388,7 @@ void NetworkServerSendChat(NetworkAction action, NetworkChatDestinationType dest
NetworkTextMessage(action, GetDrawStringCompanyColour(ci_own->client_playas), true, name, msg, data);
} else {
for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) {
if (cs->client_id == from_id && cs->status >= ServerNetworkGameSocketHandler::STATUS_AUTHORIZED) {
if (cs->client_id == from_id && cs->status >= ServerNetworkGameSocketHandler::ClientStatus::Authorized) {
cs->SendChat(action, ci_to->client_id, true, msg, data);
}
}
@@ -1402,7 +1402,7 @@ void NetworkServerSendChat(NetworkAction action, NetworkChatDestinationType dest
case NetworkChatDestinationType::Broadcast:
for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) {
if (cs->status >= ServerNetworkGameSocketHandler::STATUS_AUTHORIZED) cs->SendChat(action, from_id, false, msg, data);
if (cs->status >= ServerNetworkGameSocketHandler::ClientStatus::Authorized) cs->SendChat(action, from_id, false, msg, data);
}
NetworkAdminChat(action, desttype, from_id, msg, data, from_admin);
@@ -1425,14 +1425,14 @@ void NetworkServerSendChat(NetworkAction action, NetworkChatDestinationType dest
void NetworkServerSendExternalChat(std::string_view source, ExtendedTextColour colour, std::string_view user, std::string_view msg)
{
for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) {
if (cs->status >= ServerNetworkGameSocketHandler::STATUS_AUTHORIZED) cs->SendExternalChat(source, colour, user, msg);
if (cs->status >= ServerNetworkGameSocketHandler::ClientStatus::Authorized) cs->SendExternalChat(source, colour, user, msg);
}
NetworkTextMessage(NetworkAction::ChatExternal, colour, false, user, msg, source);
}
NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientChat(Packet &p)
{
if (this->status < STATUS_PRE_ACTIVE) {
if (this->status < ClientStatus::PreActive) {
/* Illegal call, return error and ignore the packet */
return this->SendError(NetworkErrorCode::NotAuthorized);
}
@@ -1462,7 +1462,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientChat(Packet &p)
NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientSetName(Packet &p)
{
if (this->status != STATUS_ACTIVE) {
if (this->status != ClientStatus::Active) {
/* Illegal call, return error and ignore the packet */
return this->SendError(NetworkErrorCode::NotExpected);
}
@@ -1497,7 +1497,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientSetName(Packet &p
NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientRemoteConsoleCommand(Packet &p)
{
if (this->status != STATUS_ACTIVE) return this->SendError(NetworkErrorCode::NotExpected);
if (this->status != ClientStatus::Active) return this->SendError(NetworkErrorCode::NotExpected);
Debug(net, 9, "client[{}] ReceiveClientRemoteConsoleCommand()", this->client_id);
@@ -1523,7 +1523,7 @@ NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientRemoteConsoleComm
NetworkRecvStatus ServerNetworkGameSocketHandler::ReceiveClientMove(Packet &p)
{
if (this->status != STATUS_ACTIVE) return this->SendError(NetworkErrorCode::NotExpected);
if (this->status != ClientStatus::Active) return this->SendError(NetworkErrorCode::NotExpected);
CompanyID company_id = (Owner)p.Recv_uint8();
@@ -1596,7 +1596,7 @@ void NetworkUpdateClientInfo(ClientID client_id)
Debug(desync, 1, "client: {:08x}; {:02x}; {:02x}; {:04x}", TimerGameEconomy::date, TimerGameEconomy::date_fract, ci->client_playas, client_id);
for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) {
if (cs->status >= ServerNetworkGameSocketHandler::STATUS_AUTHORIZED) {
if (cs->status >= ServerNetworkGameSocketHandler::ClientStatus::Authorized) {
cs->SendClientInfo(ci);
}
}
@@ -1761,7 +1761,7 @@ void NetworkServer_Tick(bool send_frame)
/* Check if the speed of the client is what we can expect from a client */
uint lag = NetworkCalculateLag(cs);
switch (cs->status) {
case NetworkClientSocket::STATUS_ACTIVE:
case NetworkClientSocket::ClientStatus::Active:
if (lag > _settings_client.network.max_lag_time) {
/* Client did still not report in within the specified limit. */
@@ -1794,10 +1794,10 @@ void NetworkServer_Tick(bool send_frame)
}
break;
case NetworkClientSocket::STATUS_INACTIVE:
case NetworkClientSocket::STATUS_IDENTIFY:
case NetworkClientSocket::STATUS_NEWGRFS_CHECK:
case NetworkClientSocket::STATUS_AUTHORIZED:
case NetworkClientSocket::ClientStatus::Inactive:
case NetworkClientSocket::ClientStatus::Identify:
case NetworkClientSocket::ClientStatus::NewGRFsCheck:
case NetworkClientSocket::ClientStatus::Authorized:
/* NewGRF check and authorized states should be handled almost instantly.
* So give them some lee-way, likewise for the query with inactive. */
if (lag > _settings_client.network.max_init_time) {
@@ -1807,7 +1807,7 @@ void NetworkServer_Tick(bool send_frame)
}
break;
case NetworkClientSocket::STATUS_MAP_WAIT:
case NetworkClientSocket::ClientStatus::MapWait:
/* Send every two seconds a packet to the client, to make sure
* it knows the server is still there; just someone else is
* still receiving the map. */
@@ -1822,7 +1822,7 @@ void NetworkServer_Tick(bool send_frame)
}
break;
case NetworkClientSocket::STATUS_MAP:
case NetworkClientSocket::ClientStatus::Map:
/* Downloading the map... this is the amount of time since starting the saving. */
if (lag > _settings_client.network.max_download_time) {
IConsolePrint(CC_WARNING, "Client #{} (IP: {}) is dropped because it took longer than {} ticks to download the map.", cs->client_id, cs->GetClientIP(), _settings_client.network.max_download_time);
@@ -1831,8 +1831,8 @@ void NetworkServer_Tick(bool send_frame)
}
break;
case NetworkClientSocket::STATUS_DONE_MAP:
case NetworkClientSocket::STATUS_PRE_ACTIVE:
case NetworkClientSocket::ClientStatus::DoneMap:
case NetworkClientSocket::ClientStatus::PreActive:
/* The map has been sent, so this is for loading the map and syncing up. */
if (lag > _settings_client.network.max_join_time) {
IConsolePrint(CC_WARNING, "Client #{} (IP: {}) is dropped because it took longer than {} ticks to join.", cs->client_id, cs->GetClientIP(), _settings_client.network.max_join_time);
@@ -1841,7 +1841,7 @@ void NetworkServer_Tick(bool send_frame)
}
break;
case NetworkClientSocket::STATUS_AUTH_GAME:
case NetworkClientSocket::ClientStatus::AuthGame:
/* These don't block? */
if (lag > _settings_client.network.max_password_time) {
IConsolePrint(CC_WARNING, "Client #{} (IP: {}) is dropped because it took longer than {} ticks to enter the password.", cs->client_id, cs->GetClientIP(), _settings_client.network.max_password_time);
@@ -1850,12 +1850,12 @@ void NetworkServer_Tick(bool send_frame)
}
break;
case NetworkClientSocket::STATUS_END:
case NetworkClientSocket::ClientStatus::End:
/* Bad server/code. */
NOT_REACHED();
}
if (cs->status >= NetworkClientSocket::STATUS_PRE_ACTIVE) {
if (cs->status >= NetworkClientSocket::ClientStatus::PreActive) {
/* Check if we can send command, and if we have anything in the queue */
NetworkHandleCommandQueue(cs);
@@ -1985,7 +1985,7 @@ std::string_view ServerNetworkGameSocketHandler::GetClientIP()
/** Show the status message of all clients on the console. */
void NetworkServerShowStatusToConsole()
{
static const std::string_view stat_str[] = {
static const EnumIndexArray<std::string_view, NetworkClientSocket::ClientStatus, NetworkClientSocket::ClientStatus::End> stat_str = {
"inactive",
"authorizing",
"identifying client",
@@ -1997,14 +1997,13 @@ void NetworkServerShowStatusToConsole()
"ready",
"active"
};
static_assert(lengthof(stat_str) == NetworkClientSocket::STATUS_END);
for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) {
NetworkClientInfo *ci = cs->GetInfo();
if (ci == nullptr) continue;
uint lag = NetworkCalculateLag(cs);
std::string_view status = (cs->status < (ptrdiff_t)lengthof(stat_str) ? stat_str[cs->status] : "unknown");
std::string_view status = (to_underlying(cs->status) < std::size(stat_str) ? stat_str[cs->status] : "unknown");
IConsolePrint(CC_INFO, "Client #{} name: '{}' status: '{}' frame-lag: {} company: {} IP: {}",
cs->client_id, ci->client_name, status, lag,
ci->client_playas + (Company::IsValidID(ci->client_playas) ? 1 : 0),
@@ -2018,7 +2017,7 @@ void NetworkServerShowStatusToConsole()
void NetworkServerSendConfigUpdate()
{
for (NetworkClientSocket *cs : NetworkClientSocket::Iterate()) {
if (cs->status >= NetworkClientSocket::STATUS_PRE_ACTIVE) cs->SendConfigUpdate();
if (cs->status >= NetworkClientSocket::ClientStatus::PreActive) cs->SendConfigUpdate();
}
}
@@ -2051,7 +2050,7 @@ void NetworkServerDoMove(ClientID client_id, CompanyID company_id)
} else {
NetworkClientSocket *cs = NetworkClientSocket::GetByClientID(client_id);
/* When the company isn't authorized we can't move them yet. */
if (cs->status < NetworkClientSocket::STATUS_AUTHORIZED) return;
if (cs->status < NetworkClientSocket::ClientStatus::Authorized) return;
cs->SendMove(client_id, company_id);
}
+13 -13
View File
@@ -50,24 +50,24 @@ protected:
public:
/** Status of a client */
enum ClientStatus : uint8_t {
STATUS_INACTIVE, ///< The client is not connected nor active.
STATUS_AUTH_GAME, ///< The client is authorizing with game (server) password.
STATUS_IDENTIFY, ///< The client is identifying itself.
STATUS_NEWGRFS_CHECK, ///< The client is checking NewGRFs.
STATUS_AUTHORIZED, ///< The client is authorized.
STATUS_MAP_WAIT, ///< The client is waiting as someone else is downloading the map.
STATUS_MAP, ///< The client is downloading the map.
STATUS_DONE_MAP, ///< The client has downloaded the map.
STATUS_PRE_ACTIVE, ///< The client is catching up the delayed frames.
STATUS_ACTIVE, ///< The client is active within in the game.
STATUS_END, ///< Must ALWAYS be on the end of this list!! (period).
enum class ClientStatus : uint8_t {
Inactive, ///< The client is not connected nor active.
AuthGame, ///< The client is authorizing with game (server) password.
Identify, ///< The client is identifying itself.
NewGRFsCheck, ///< The client is checking NewGRFs.
Authorized, ///< The client is authorized.
MapWait, ///< The client is waiting as someone else is downloading the map.
Map, ///< The client is downloading the map.
DoneMap, ///< The client has downloaded the map.
PreActive, ///< The client is catching up the delayed frames.
Active, ///< The client is active within in the game.
End, ///< Must ALWAYS be on the end of this list!! (period).
};
uint8_t lag_test = 0; ///< Byte used for lag-testing the client
uint8_t last_token = 0; ///< The last random token we did send to verify the client is listening
uint32_t last_token_frame = 0; ///< The last frame we received the right token
ClientStatus status = STATUS_INACTIVE; ///< Status of this client
ClientStatus status = ClientStatus::Inactive; ///< Status of this client
CommandQueue outgoing_queue{}; ///< The command-queue awaiting delivery; conceptually more a bucket to gather commands in, after which the whole bucket is sent to the client.
size_t receive_limit = 0; ///< Amount of bytes that we can receive at this moment