1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-20 21:43:06 +01:00

Improve network module in more C++ way

This commit is contained in:
skdltmxn
2022-02-10 05:57:25 +09:00
committed by GitHub
parent 052da74760
commit 29083f4cb2
19 changed files with 120 additions and 171 deletions

View File

@@ -407,12 +407,12 @@ bool NetworkBase::BeginServer(uint16_t port, const std::string& address)
return true;
}
int32_t NetworkBase::GetMode()
int32_t NetworkBase::GetMode() const noexcept
{
return mode;
}
int32_t NetworkBase::GetStatus()
int32_t NetworkBase::GetStatus() const noexcept
{
return status;
}
@@ -430,17 +430,17 @@ NetworkAuth NetworkBase::GetAuthStatus()
return NetworkAuth::None;
}
uint32_t NetworkBase::GetServerTick()
uint32_t NetworkBase::GetServerTick() const noexcept
{
return _serverState.tick;
}
uint8_t NetworkBase::GetPlayerID()
uint8_t NetworkBase::GetPlayerID() const noexcept
{
return player_id;
}
NetworkConnection* NetworkBase::GetPlayerConnection(uint8_t id)
NetworkConnection* NetworkBase::GetPlayerConnection(uint8_t id) const
{
auto player = GetPlayerByID(id);
if (player != nullptr)
@@ -653,19 +653,14 @@ void NetworkBase::UpdateClient()
}
}
std::vector<std::unique_ptr<NetworkPlayer>>::iterator NetworkBase::GetPlayerIteratorByID(uint8_t id)
auto NetworkBase::GetPlayerIteratorByID(uint8_t id) const
{
auto it = std::find_if(player_list.begin(), player_list.end(), [&id](std::unique_ptr<NetworkPlayer> const& player) {
return std::find_if(player_list.begin(), player_list.end(), [id](std::unique_ptr<NetworkPlayer> const& player) {
return player->Id == id;
});
if (it != player_list.end())
{
return it;
}
return player_list.end();
}
NetworkPlayer* NetworkBase::GetPlayerByID(uint8_t id)
NetworkPlayer* NetworkBase::GetPlayerByID(uint8_t id) const
{
auto it = GetPlayerIteratorByID(id);
if (it != player_list.end())
@@ -675,18 +670,13 @@ NetworkPlayer* NetworkBase::GetPlayerByID(uint8_t id)
return nullptr;
}
std::vector<std::unique_ptr<NetworkGroup>>::iterator NetworkBase::GetGroupIteratorByID(uint8_t id)
auto NetworkBase::GetGroupIteratorByID(uint8_t id) const
{
auto it = std::find_if(
group_list.begin(), group_list.end(), [&id](std::unique_ptr<NetworkGroup> const& group) { return group->Id == id; });
if (it != group_list.end())
{
return it;
}
return group_list.end();
return std::find_if(
group_list.begin(), group_list.end(), [id](std::unique_ptr<NetworkGroup> const& group) { return group->Id == id; });
}
NetworkGroup* NetworkBase::GetGroupByID(uint8_t id)
NetworkGroup* NetworkBase::GetGroupByID(uint8_t id) const
{
auto it = GetGroupIteratorByID(id);
if (it != group_list.end())
@@ -712,7 +702,7 @@ const char* NetworkBase::FormatChat(NetworkPlayer* fromplayer, const char* text)
return formatted.c_str();
}
void NetworkBase::SendPacketToClients(const NetworkPacket& packet, bool front, bool gameCmd)
void NetworkBase::SendPacketToClients(const NetworkPacket& packet, bool front, bool gameCmd) const
{
for (auto& client_connection : client_connection_list)
{
@@ -727,8 +717,7 @@ void NetworkBase::SendPacketToClients(const NetworkPacket& packet, bool front, b
continue;
}
}
auto packetCopy = packet;
client_connection->QueuePacket(std::move(packetCopy), front);
client_connection->QueuePacket(packet, front);
}
}
@@ -765,7 +754,7 @@ bool NetworkBase::CheckSRAND(uint32_t tick, uint32_t srand0)
return true;
}
bool NetworkBase::IsDesynchronised()
bool NetworkBase::IsDesynchronised() const noexcept
{
return _serverState.state == NetworkServerState::Desynced;
}
@@ -804,7 +793,7 @@ void NetworkBase::RequestStateSnapshot()
Client_Send_RequestGameState(_serverState.desyncTick);
}
NetworkServerState_t NetworkBase::GetServerState() const
NetworkServerState_t NetworkBase::GetServerState() const noexcept
{
return _serverState;
}
@@ -930,7 +919,7 @@ uint8_t NetworkBase::GetGroupIDByHash(const std::string& keyhash)
return groupId;
}
uint8_t NetworkBase::GetDefaultGroup()
uint8_t NetworkBase::GetDefaultGroup() const noexcept
{
return default_group;
}
@@ -1098,7 +1087,7 @@ void NetworkBase::BeginChatLog()
_chatLogPath = BeginLog(directory, "", _chatLogFilenameFormat);
# if defined(_WIN32) && !defined(__MINGW32__)
auto pathW = String::ToWideChar(_chatLogPath.c_str());
auto pathW = String::ToWideChar(_chatLogPath);
_chat_log_fs.open(pathW.c_str(), std::ios::out | std::ios::app);
# else
_chat_log_fs.open(_chatLogPath, std::ios::out | std::ios::app);
@@ -1125,7 +1114,7 @@ void NetworkBase::BeginServerLog()
_serverLogPath = BeginLog(directory, ServerName, _serverLogFilenameFormat);
# if defined(_WIN32) && !defined(__MINGW32__)
auto pathW = String::ToWideChar(_serverLogPath.c_str());
auto pathW = String::ToWideChar(_serverLogPath);
_server_log_fs.open(pathW.c_str(), std::ios::out | std::ios::app | std::ios::binary);
# else
_server_log_fs.open(_serverLogPath, std::ios::out | std::ios::app | std::ios::binary);
@@ -1205,10 +1194,10 @@ void NetworkBase::Client_Send_AUTH(
const std::string& name, const std::string& password, const std::string& pubkey, const std::vector<uint8_t>& signature)
{
NetworkPacket packet(NetworkCommand::Auth);
packet.WriteString(network_get_version().c_str());
packet.WriteString(name.c_str());
packet.WriteString(password.c_str());
packet.WriteString(pubkey.c_str());
packet.WriteString(network_get_version());
packet.WriteString(name);
packet.WriteString(password);
packet.WriteString(pubkey);
assert(signature.size() <= static_cast<size_t>(UINT32_MAX));
packet << static_cast<uint32_t>(signature.size());
packet.Write(signature.data(), signature.size());
@@ -1364,7 +1353,7 @@ void NetworkBase::Server_Send_AUTH(NetworkConnection& connection)
packet << static_cast<uint32_t>(connection.AuthStatus) << new_playerid;
if (connection.AuthStatus == NetworkAuth::BadVersion)
{
packet.WriteString(network_get_version().c_str());
packet.WriteString(network_get_version());
}
connection.QueuePacket(std::move(packet));
if (connection.AuthStatus != NetworkAuth::Ok && connection.AuthStatus != NetworkAuth::RequirePassword)
@@ -1517,7 +1506,7 @@ void NetworkBase::Server_Send_TICK()
if (flags & NETWORK_TICK_FLAG_CHECKSUMS)
{
EntitiesChecksum checksum = GetAllEntitiesChecksum();
packet.WriteString(checksum.ToString().c_str());
packet.WriteString(checksum.ToString());
}
SendPacketToClients(packet);
@@ -1608,7 +1597,7 @@ void NetworkBase::Server_Send_GAMEINFO(NetworkConnection& connection)
jsonObj["provider"] = jsonProvider;
packet.WriteString(jsonObj.dump().c_str());
packet.WriteString(jsonObj.dump());
packet << _serverState.gamestateSnapshotsEnabled;
# endif
@@ -2163,7 +2152,7 @@ void NetworkBase::Client_Handle_TOKEN(NetworkConnection& connection, NetworkPack
// when process dump gets collected at some point in future.
_key.Unload();
Client_Send_AUTH(gConfigNetwork.player_name.c_str(), gCustomPassword.c_str(), pubkey.c_str(), signature);
Client_Send_AUTH(gConfigNetwork.player_name, gCustomPassword, pubkey, signature);
}
void NetworkBase::Server_Handle_REQUEST_GAMESTATE(NetworkConnection& connection, NetworkPacket& packet)
@@ -3109,7 +3098,7 @@ void NetworkBase::Client_Handle_EVENT([[maybe_unused]] NetworkConnection& connec
{
auto playerName = packet.ReadString();
auto message = FormatStringId(STR_MULTIPLAYER_PLAYER_HAS_JOINED_THE_GAME, playerName);
chat_history_add(message.c_str());
chat_history_add(message);
break;
}
case SERVER_EVENT_PLAYER_DISCONNECTED:
@@ -3125,7 +3114,7 @@ void NetworkBase::Client_Handle_EVENT([[maybe_unused]] NetworkConnection& connec
{
message = FormatStringId(STR_MULTIPLAYER_PLAYER_HAS_DISCONNECTED_WITH_REASON, playerName, reason);
}
chat_history_add(message.c_str());
chat_history_add(message);
break;
}
}
@@ -3449,7 +3438,7 @@ void network_chat_show_server_greeting()
thread_local std::string greeting_formatted;
greeting_formatted.assign("{OUTLINE}{GREEN}");
greeting_formatted += greeting;
chat_history_add(greeting_formatted.c_str());
chat_history_add(greeting_formatted);
}
}
@@ -3856,7 +3845,7 @@ void network_send_password(const std::string& password)
// Don't keep private key in memory. There's no need and it may get leaked
// when process dump gets collected at some point in future.
network._key.Unload();
network.Client_Send_AUTH(gConfigNetwork.player_name.c_str(), password, pubkey.c_str(), signature);
network.Client_Send_AUTH(gConfigNetwork.player_name, password, pubkey, signature);
}
void network_set_password(const char* password)