Skip to content

Commit

Permalink
add to print variant packet
Browse files Browse the repository at this point in the history
  • Loading branch information
ZTzTopia committed Feb 23, 2024
1 parent 32bfee1 commit 422beea
Show file tree
Hide file tree
Showing 5 changed files with 72 additions and 13 deletions.
18 changes: 14 additions & 4 deletions src/client/client.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -147,8 +147,12 @@ void Client::on_receive(ENetPeer* peer, ENetPacket* packet)

TextParse text_parse{ message };

if (core_->get_config().get<bool>("server.printMessage"))
spdlog::info("Incoming message from server: \n{}", text_parse.get_raw("|", "\t"));
if (core_->get_config().get<bool>("log.printMessage")) {
spdlog::info("Incoming message from server:");
for (const auto& key_value : text_parse.get_key_values()) {
spdlog::info("\t{}", key_value);
}
}

const core::EventMessage event_message{ *player_, *to_player, text_parse };
event_message.from = core::EventFrom::FromServer;
Expand All @@ -171,8 +175,14 @@ void Client::on_receive(ENetPeer* peer, ENetPacket* packet)
event_packet.from = core::EventFrom::FromServer;
core_->get_event_dispatcher().dispatch(event_packet);

if (core_->get_config().get<bool>("server.printGameUpdatePacket"))
spdlog::info("Incoming GameUpdatePacket {} ({}) from server: {:p}\n", magic_enum::enum_name(game_update_packet.type), magic_enum::enum_integer(game_update_packet.type), spdlog::to_hex(byte_stream.get_data()));
if (core_->get_config().get<bool>("log.printGameUpdatePacket")) {
spdlog::info(
"Incoming GameUpdatePacket {} ({}) from server: {:p}\n",
magic_enum::enum_name(game_update_packet.type),
magic_enum::enum_integer(game_update_packet.type),
spdlog::to_hex(byte_stream.get_data())
);
}

if (!event_packet.canceled) {
std::ignore = to_player->send_packet(byte_stream.get_data(), 0);
Expand Down
6 changes: 3 additions & 3 deletions src/core/config.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,12 @@ namespace core {
static const std::map<std::string, ConfigStorage> config_defaults{
{ "server.port", 16999 },
{ "server.address", "www.growtopia1.com" },
{ "server.printGameUpdatePacket", false },
{ "server.printMessage", true },
{ "client.game_version", "4.35" },
{ "client.protocol", 192 },
{ "extension.ignore", std::vector<std::string>{ "0xdeadbeef" } },

{ "log.printMessage", true },
{ "log.printGameUpdatePacket", false },
{ "log.printVariant", true },
};

Config::Config()
Expand Down
30 changes: 28 additions & 2 deletions src/extension/parser/parser_impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,34 @@ class ParserExtension final : public IParserExtension {
return;
}

// TODO: Print the variant
// spdlog::info("Variant: {}", variant);
std::vector variants{ variant.get_variants() };
if (variants.empty()) {
spdlog::warn("Variants are empty");
return;
}

if (core_->get_config().get<bool>("log.printVariant")) {
spdlog::info("Incoming variant from {}:", event.from == core::EventFrom::FromClient ? "client" : "server");
for (const auto& var : variants) {
switch (packet::Variant::get_type(var)) {
case packet::VariantType::FLOAT:
spdlog::info("\t[FLOAT]: {}", std::get<float>(var));
break;
case packet::VariantType::STRING:
spdlog::info("\t[STRING]: {}", std::get<std::string>(var));
break;
case packet::VariantType::UNSIGNED:
spdlog::info("\t[UNSIGNED]: {}", std::get<uint32_t>(var));
break;
case packet::VariantType::SIGNED:
spdlog::info("\t[SIGNED]: {}", std::get<int32_t>(var));
break;
default:
spdlog::warn("Unknown variant type");
break;
}
}
}

const EventCallFunction event_call_function{
event.get_player(),
Expand Down
18 changes: 14 additions & 4 deletions src/server/server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -117,8 +117,12 @@ void Server::on_receive(ENetPeer* peer, ENetPacket* packet)
byte_stream.read(message, byte_stream.get_size() - sizeof(packet::NetMessageType) - 1);

TextParse text_parse{ message };
if (core_->get_config().get<bool>("server.printMessage"))
spdlog::info("Incoming message from client: \n{}", text_parse.get_raw("|", "\t"));
if (core_->get_config().get<bool>("log.printMessage")) {
spdlog::info("Incoming message from client:");
for (const auto& key_value : text_parse.get_key_values()) {
spdlog::info("\t{}", key_value);
}
}

const core::EventMessage event_message{ *player_, *to_player, text_parse };
event_message.from = core::EventFrom::FromClient;
Expand Down Expand Up @@ -148,8 +152,14 @@ void Server::on_receive(ENetPeer* peer, ENetPacket* packet)
event_packet.from = core::EventFrom::FromClient;
core_->get_event_dispatcher().dispatch(event_packet);

if (core_->get_config().get<bool>("server.printGameUpdatePacket"))
spdlog::info("Incoming GameUpdatePacket {} ({}) from client: {:p}\n", magic_enum::enum_name(game_update_packet.type), magic_enum::enum_integer(game_update_packet.type), spdlog::to_hex(byte_stream.get_data()));
if (core_->get_config().get<bool>("log.printGameUpdatePacket")) {
spdlog::info(
"Incoming GameUpdatePacket {} ({}) from client: {:p}\n",
magic_enum::enum_name(game_update_packet.type),
magic_enum::enum_integer(game_update_packet.type),
spdlog::to_hex(byte_stream.get_data())
);
}

if (!event_packet.canceled) {
std::ignore = to_player->send_packet(byte_stream.get_data(), 0);
Expand Down
13 changes: 13 additions & 0 deletions src/utils/text_parse.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,19 @@ class TextParse {
return raw_data;
}

[[nodiscard]] std::vector<std::string> get_key_values(const std::string& delimiter = "|") const
{
std::vector<std::string> key_values{};
for (auto it = m_data.cbegin(); it != m_data.cend(); ++it) {
for (const auto& token : it->second) {
key_values.emplace_back(it->first + delimiter + token);
}
}

return key_values;
}

[[nodiscard]] std::unordered_map<std::string, std::vector<std::string>> get_data() const { return m_data; }
[[nodiscard]] bool empty() const { return m_data.empty(); }

private:
Expand Down

0 comments on commit 422beea

Please sign in to comment.