aboutsummaryrefslogtreecommitdiff
path: root/packet_distribution.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'packet_distribution.cpp')
-rw-r--r--packet_distribution.cpp195
1 files changed, 185 insertions, 10 deletions
diff --git a/packet_distribution.cpp b/packet_distribution.cpp
index 5250dfab..163c744d 100644
--- a/packet_distribution.cpp
+++ b/packet_distribution.cpp
@@ -1,6 +1,7 @@
#include "aoapplication.h"
#include "lobby.h"
+#include "courtroom.h"
#include "networkmanager.h"
#include "encryption_functions.h"
#include "hardware_functions.h"
@@ -62,8 +63,7 @@ void AOApplication::ms_packet_received(AOPacket *p_packet)
}
if (courtroom_constructed)
{
- //T0D0: uncomment this when it's implemented
- //w_courtroom->append_ms_chat_message(message_line);
+ w_courtroom->append_ms_chatmessage(message_line);
}
}
}
@@ -76,7 +76,8 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
QStringList f_contents = p_packet->get_contents();
QString f_packet = p_packet->to_string();
- qDebug() << "R: " << f_packet;
+ if (header != "checkconnection")
+ qDebug() << "R: " << f_packet;
if (header == "decryptor")
{
@@ -91,15 +92,18 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
AOPacket *hi_packet = new AOPacket("HI#" + f_hdid + "#%");
send_server_packet(hi_packet);
-
- delete hi_packet;
}
else if (header == "ID")
{
if (f_contents.size() < 1)
return;
- //T0D0: save server version here, somehow(it's in the HI# packet usually)
+ s_pv = f_contents.at(0).toInt();
+
+ if (f_contents.size() < 2)
+ return;
+
+ //T0D0: store server version
}
else if (header == "CT")
{
@@ -109,10 +113,9 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
return;
}
- //QString message_line = f_contents.at(0) + ": " + f_contents.at(1);
+ QString message_line = f_contents.at(0) + ": " + f_contents.at(1);
- //T0D0, uncomment when implemented
- //w_courtroom->append_ooc_chatmessage(message_line)
+ w_courtroom->append_server_chatmessage(message_line);
}
else if (header == "PN")
{
@@ -121,6 +124,175 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
w_lobby->set_player_count(f_contents.at(0).toInt(), f_contents.at(1).toInt());
}
+ else if (header == "SI")
+ {
+ if (f_contents.size() < 3)
+ return;
+
+ char_list_size = f_contents.at(0).toInt();
+ loaded_chars = 0;
+ evidence_list_size = f_contents.at(1).toInt();
+ loaded_evidence = 0;
+ music_list_size = f_contents.at(2).toInt();
+ loaded_music = 0;
+
+ destruct_courtroom();
+
+ construct_courtroom();
+
+ w_lobby->show_loading_overlay();
+ w_lobby->set_loading_text("Loading");
+
+ AOPacket *f_packet = new AOPacket("askchar2#%");
+ send_server_packet(f_packet);
+ }
+ else if (header == "CI")
+ {
+ if (!courtroom_constructed)
+ return;
+
+ for (int n_element = 0 ; n_element < f_contents.size() ; n_element += 2)
+ {
+ if (f_contents.at(n_element).toInt() != loaded_chars)
+ break;
+
+ //this means we are on the last element and checking n + 1 element will be game over so
+ if (n_element == f_contents.size() - 1)
+ break;
+
+ QStringList sub_elements = f_contents.at(n_element + 1).split("&");
+ if (sub_elements.size() < 2)
+ break;
+
+ char_type f_char;
+ f_char.name = sub_elements.at(0);
+ f_char.description = sub_elements.at(1);
+ //temporary. the CharsCheck packet sets this properly
+ f_char.taken = false;
+
+ ++loaded_chars;
+
+ w_lobby->set_loading_text("Loading chars:\n" + QString::number(loaded_chars) + "/" + QString::number(char_list_size));
+
+ w_courtroom->append_char(f_char);
+ }
+
+ if (loaded_chars < char_list_size)
+ {
+ QString next_packet_number = QString::number(((loaded_chars - 1) / 10) + 1);
+ send_server_packet(new AOPacket("AN#" + next_packet_number + "#%"));
+ }
+
+ else
+ {
+ if (evidence_list_size == 0)
+ send_server_packet(new AOPacket("AM#0#%"));
+ else
+ send_server_packet(new AOPacket("AE#0#%"));
+ }
+ }
+ else if (header == "EI"){
+ if (!courtroom_constructed)
+ return;
+
+
+ // +1 because evidence starts at 1 rather than 0 for whatever reason
+ //enjoy fanta
+ if (f_contents.at(0).toInt() != loaded_evidence + 1)
+ return;
+
+ if (f_contents.size() < 2)
+ return;
+
+ QStringList sub_elements = f_contents.at(1).split("&");
+ if (sub_elements.size() < 4)
+ return;
+
+ evi_type f_evi;
+ f_evi.name = sub_elements.at(0);
+ f_evi.description = sub_elements.at(1);
+ //no idea what the number at position 2 is. probably an identifier?
+ f_evi.image = sub_elements.at(3);
+
+ ++loaded_evidence;
+
+ w_lobby->set_loading_text("Loading evidence:\n" + QString::number(loaded_evidence) + "/" + QString::number(evidence_list_size));
+
+ w_courtroom->append_evidence(f_evi);
+
+ if (loaded_evidence < evidence_list_size)
+ {
+ qDebug() << "loaded evidence: " << loaded_evidence;
+ QString next_packet_number = QString::number(loaded_evidence);
+ send_server_packet(new AOPacket("AE#" + next_packet_number + "#%"));
+ }
+ else
+ {
+ send_server_packet(new AOPacket("AM#0#%"));
+ }
+ }
+ else if (header == "EM")
+ {
+ if (!courtroom_constructed)
+ return;
+
+ for (int n_element = 0 ; n_element < f_contents.size() ; n_element += 2)
+ {
+ if (f_contents.at(n_element).toInt() != loaded_music)
+ break;
+
+ if (n_element == f_contents.size() - 1)
+ break;
+
+ QString f_music = f_contents.at(n_element + 1);
+
+ ++loaded_music;
+
+ w_lobby->set_loading_text("Loading music:\n" + QString::number(loaded_music) + "/" + QString::number(music_list_size));
+
+ w_courtroom->append_music(f_music);
+ }
+
+ //apparently we need to intentionally send another AM packet to get onwards in the loading process
+ //in spite of the fact that we actually received all the music
+ //enjoy fanta
+ //if (loaded_music < music_list_size)
+ //{
+ QString next_packet_number = QString::number(((loaded_music - 1) / 10) + 1);
+ send_server_packet(new AOPacket("AM#" + next_packet_number + "#%"));
+ //}
+ }
+ if (header == "CharsCheck")
+ {
+ for (int n_char = 0 ; n_char < f_contents.size() ; ++n_char)
+ {
+ if (f_contents.at(n_char) == "-1")
+ w_courtroom->set_taken(n_char, true);
+ else
+ w_courtroom->set_taken(n_char, false);
+ }
+ }
+ if (header == "DONE")
+ {
+ if (!courtroom_constructed)
+ return;
+
+ w_courtroom->set_char_select_page();
+
+ w_courtroom->append_ms_chatmessage(w_lobby->get_chatlog());
+
+ w_courtroom->show();
+
+ destruct_lobby();
+ }
+ //server accepting char request(CC) packet
+ if (header == "PV")
+ {
+ if (f_contents.size() < 3)
+ return;
+
+ w_courtroom->enter_courtroom(f_contents.at(2).toInt());
+ }
}
void AOApplication::send_ms_packet(AOPacket *p_packet)
@@ -132,6 +304,8 @@ void AOApplication::send_ms_packet(AOPacket *p_packet)
net_manager->ship_ms_packet(f_packet);
qDebug() << "S(ms):" << f_packet;
+
+ delete p_packet;
}
void AOApplication::send_server_packet(AOPacket *p_packet)
@@ -142,7 +316,7 @@ void AOApplication::send_server_packet(AOPacket *p_packet)
if (encryption_needed)
{
- qDebug() << "S:(e)" << f_packet;
+ qDebug() << "S(e):" << f_packet;
p_packet->encrypt_header(s_decryptor);
f_packet = p_packet->to_string();
@@ -154,4 +328,5 @@ void AOApplication::send_server_packet(AOPacket *p_packet)
net_manager->ship_server_packet(f_packet);
+ delete p_packet;
}