mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-06 06:32:56 +01:00
Implement review suggestions
This commit is contained in:
@@ -39,7 +39,7 @@ public:
|
||||
uint32 PingTime = 0;
|
||||
NetworkKey Key;
|
||||
std::vector<uint8> Challenge;
|
||||
std::vector<std::string> RequestedObjects;
|
||||
std::vector<std::string> RequestedObjects;
|
||||
|
||||
NetworkConnection();
|
||||
~NetworkConnection();
|
||||
|
||||
@@ -883,7 +883,7 @@ void Network::Server_Send_TOKEN(NetworkConnection& connection)
|
||||
connection.QueuePacket(std::move(packet));
|
||||
}
|
||||
|
||||
void Network::Server_Send_OBJECTS(NetworkConnection& connection, rct_object_entry * object_list, uint32 size)
|
||||
void Network::Server_Send_OBJECTS(NetworkConnection& connection, const rct_object_entry * object_list, uint32 size) const
|
||||
{
|
||||
log_verbose("Server sends objects list with %u items", size);
|
||||
std::unique_ptr<NetworkPacket> packet(NetworkPacket::Allocate());
|
||||
@@ -892,7 +892,7 @@ void Network::Server_Send_OBJECTS(NetworkConnection& connection, rct_object_entr
|
||||
{
|
||||
log_verbose("Object %.8s (checksum %x)", object_list[i].name, object_list[i].checksum);
|
||||
packet->Write((const uint8 *)object_list[i].name, 8);
|
||||
*packet << object_list[i].checksum;
|
||||
*packet << object_list[i].checksum << object_list[i].flags;
|
||||
}
|
||||
connection.QueuePacket(std::move(packet));
|
||||
}
|
||||
@@ -1456,10 +1456,9 @@ void Network::Server_Client_Joined(const char* name, const std::string &keyhash,
|
||||
const char * player_name = (const char *) player->name.c_str();
|
||||
format_string(text, 256, STR_MULTIPLAYER_PLAYER_HAS_JOINED_THE_GAME, &player_name);
|
||||
chat_history_add(text);
|
||||
Server_Send_MAP(&connection);
|
||||
gNetwork.Server_Send_EVENT_PLAYER_JOINED(player_name);
|
||||
Server_Send_GROUPLIST(connection);
|
||||
Server_Send_PLAYERLIST();
|
||||
rct_object_entry object_entries[OBJECT_ENTRY_COUNT];
|
||||
int count = scenario_get_num_packed_objects_to_write(object_entries);
|
||||
Server_Send_OBJECTS(connection, object_entries, count);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1470,9 +1469,6 @@ void Network::Server_Handle_TOKEN(NetworkConnection& connection, NetworkPacket&
|
||||
for (int i = 0; i < token_size; i++) {
|
||||
connection.Challenge[i] = (uint8)(rand() & 0xff);
|
||||
}
|
||||
rct_object_entry object_entries[OBJECT_ENTRY_COUNT];
|
||||
int count = scenario_get_num_packed_objects_to_write(object_entries);
|
||||
Server_Send_OBJECTS(connection, object_entries, count);
|
||||
Server_Send_TOKEN(connection);
|
||||
}
|
||||
|
||||
@@ -1486,14 +1482,20 @@ void Network::Client_Handle_OBJECTS(NetworkConnection& connection, NetworkPacket
|
||||
for (uint32 i = 0; i < size; i++)
|
||||
{
|
||||
const char * name = (const char *)packet.Read(8);
|
||||
uint32 checksum;
|
||||
packet >> checksum;
|
||||
// Required, as packet has no null terminators.
|
||||
std::string s(name, name + 8);
|
||||
uint32 checksum, flags;
|
||||
packet >> checksum >> flags;
|
||||
const ObjectRepositoryItem * ori = repo->FindObject(s.c_str());
|
||||
if (ori == nullptr || ori->ObjectEntry.checksum != checksum) {
|
||||
// This could potentially request the object if checksums don't match, but since client
|
||||
// won't replace its version with server-provided one, we don't do that.
|
||||
if (ori == nullptr) {
|
||||
log_verbose("Requesting object %s with checksum %x from server",
|
||||
s.c_str(), checksum);
|
||||
requested_objects.push_back(s);
|
||||
} else if (ori->ObjectEntry.checksum != checksum || ori->ObjectEntry.flags != flags) {
|
||||
log_warning("Object %s has different checksum/flags (%x/%x) than server (%x/%x).",
|
||||
s.c_str(), ori->ObjectEntry.checksum, ori->ObjectEntry.flags, checksum, flags);
|
||||
}
|
||||
}
|
||||
Client_Send_OBJECTS(requested_objects);
|
||||
@@ -1511,6 +1513,12 @@ void Network::Server_Handle_OBJECTS(NetworkConnection& connection, NetworkPacket
|
||||
log_verbose("Client requested object %s", s.c_str());
|
||||
connection.RequestedObjects.push_back(s);
|
||||
}
|
||||
|
||||
const char * player_name = (const char *) connection.Player->name.c_str();
|
||||
Server_Send_MAP(&connection);
|
||||
gNetwork.Server_Send_EVENT_PLAYER_JOINED(player_name);
|
||||
Server_Send_GROUPLIST(connection);
|
||||
Server_Send_PLAYERLIST();
|
||||
}
|
||||
|
||||
void Network::Server_Handle_AUTH(NetworkConnection& connection, NetworkPacket& packet)
|
||||
|
||||
@@ -143,7 +143,7 @@ public:
|
||||
void Server_Send_EVENT_PLAYER_DISCONNECTED(const char *playerName, const char *reason);
|
||||
void Client_Send_GAMEINFO();
|
||||
void Client_Send_OBJECTS(const std::vector<std::string> &objects);
|
||||
void Server_Send_OBJECTS(NetworkConnection& connection, rct_object_entry * object_list, uint32 size);
|
||||
void Server_Send_OBJECTS(NetworkConnection& connection, const rct_object_entry *object_list, uint32 size) const;
|
||||
|
||||
std::vector<std::unique_ptr<NetworkPlayer>> player_list;
|
||||
std::vector<std::unique_ptr<NetworkGroup>> group_list;
|
||||
|
||||
@@ -92,7 +92,7 @@ void S6Exporter::SaveScenario(SDL_RWops *rw)
|
||||
void S6Exporter::Save(SDL_RWops * rw, bool isScenario)
|
||||
{
|
||||
_s6.header.type = isScenario ? S6_TYPE_SCENARIO : S6_TYPE_SAVEDGAME;
|
||||
_s6.header.num_packed_objects = !ExportObjects ? uint16(ExportObjectsList.size()) : scenario_get_num_packed_objects_to_write(nullptr);
|
||||
_s6.header.num_packed_objects = ExportObjects ? scenario_get_num_packed_objects_to_write(nullptr) : uint16(ExportObjectsList.size());
|
||||
_s6.header.version = S6_RCT2_VERSION;
|
||||
_s6.header.magic_number = S6_MAGIC_NUMBER;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user