aboutsummaryrefslogtreecommitdiff
path: root/src/packet_distribution.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/packet_distribution.cpp')
-rw-r--r--src/packet_distribution.cpp44
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)
{