diff options
Diffstat (limited to 'src/packet_distribution.cpp')
| -rw-r--r-- | src/packet_distribution.cpp | 44 |
1 files changed, 39 insertions, 5 deletions
diff --git a/src/packet_distribution.cpp b/src/packet_distribution.cpp index f440a0ce..677b3fdb 100644 --- a/src/packet_distribution.cpp +++ b/src/packet_distribution.cpp @@ -7,6 +7,10 @@ #include "networkmanager.h" #include "options.h" +#include <QJsonArray> +#include <QJsonDocument> +#include <QJsonObject> + void AOApplication::append_to_demofile(QString packet_string) { if (Options::getInstance().logToDemoFileEnabled() && !log_filename.isEmpty()) @@ -38,6 +42,16 @@ void AOApplication::server_packet_received(AOPacket packet) } #endif + auto convert_to_json = [](QString data) -> QJsonDocument { + QJsonParseError error; + QJsonDocument document = QJsonDocument::fromJson(data.toUtf8(), &error); + if (error.error != QJsonParseError::NoError) + { + qWarning().noquote() << "Invalid or malformed JSON data:" << error.errorString(); + } + return document; + }; + if (header == "decryptor") { if (content.size() == 0) @@ -117,11 +131,6 @@ void AOApplication::server_packet_received(AOPacket packet) generated_chars = 0; - destruct_courtroom(); - construct_courtroom(); - - courtroom_loaded = false; - int selected_server = w_lobby->get_selected_server(); QString server_address; QString server_name; @@ -529,6 +538,11 @@ void AOApplication::server_packet_received(AOPacket packet) } else if (header == "ZZ") { + if (content.size() < 1) + { + return; + } + if (is_courtroom_constructed() && !content.isEmpty()) { w_courtroom->mod_called(content.at(0)); @@ -676,6 +690,26 @@ void AOApplication::server_packet_received(AOPacket packet) m_serverdata.set_asset_url(content.at(0)); } + else if (header == "PR") + { + if (content.size() < 2) + { + return; + } + + PlayerRegister update{content.at(0).toInt(), PlayerRegister::REGISTER_TYPE(content.at(1).toInt())}; + w_courtroom->playerList()->registerPlayer(update); + } + else if (header == "PU") + { + if (content.size() < 3) + { + return; + } + + PlayerUpdate update{content.at(0).toInt(), PlayerUpdate::DATA_TYPE(content.at(1).toInt()), content.at(2)}; + w_courtroom->playerList()->updatePlayer(update); + } if (log_to_demo) { |
