aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoriamgoofball <iamgoofball@gmail.com>2019-01-23 01:40:57 -0800
committeriamgoofball <iamgoofball@gmail.com>2019-01-23 01:40:57 -0800
commitedbd67c2dcd25c2e3da6765661d2b04beffdacbf (patch)
tree090264ca8785b675a6164bce014bc701037b1927
parentf75032840450263bfe27d3b5a68ea1458a0ce8a5 (diff)
multi-threaded music
-rw-r--r--src/packet_distribution.cpp89
1 files changed, 39 insertions, 50 deletions
diff --git a/src/packet_distribution.cpp b/src/packet_distribution.cpp
index 9ea28395..1820547d 100644
--- a/src/packet_distribution.cpp
+++ b/src/packet_distribution.cpp
@@ -7,6 +7,31 @@
#include "hardware_functions.h"
#include "debug_functions.h"
+class AOPacketLoadMusicThreading : public QRunnable
+{
+public:
+ AOApplication *myapp;
+ QString filename;
+ bool ismusic;
+ AOPacketLoadMusicThreading(AOApplication *my_app, QString file_name, bool is_music){
+ myapp = my_app;
+ filename = file_name;
+ ismusic = is_music;
+ }
+ void run()
+ {
+ qDebug() << "Processing " << filename << " on thread " << QThread::currentThread();
+ if(ismusic)
+ {
+ myapp->w_courtroom->append_music(filename);
+ }
+ else
+ {
+ myapp->w_courtroom->append_area(filename);
+ }
+ }
+};
+
void AOApplication::ms_packet_received(AOPacket *p_packet)
{
p_packet->net_decode();
@@ -280,51 +305,6 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
if (is_discord_enabled())
discord->state_server(server_name.toStdString(), hash.result().toBase64().toStdString());
}
- else if (header == "CI")
- {
- if (!courtroom_constructed)
- goto end;
-
- 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);
- f_char.evidence_string = sub_elements.at(3);
- //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);
-
- int total_loading_size = char_list_size * 2 + evidence_list_size + music_list_size;
- int loading_value = int(((loaded_chars + generated_chars + loaded_music + loaded_evidence) / static_cast<double>(total_loading_size)) * 100);
- w_lobby->set_loading_value(loading_value);
- }
-
- if (improved_loading_enabled)
- send_server_packet(new AOPacket("RE#%"));
- else
- {
- QString next_packet_number = QString::number(((loaded_chars - 1) / 10) + 1);
- send_server_packet(new AOPacket("AN#" + next_packet_number + "#%"));
- }
-
- }
else if (header == "EI")
{
if (!courtroom_constructed)
@@ -387,7 +367,8 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
if (musics_time)
{
- w_courtroom->append_music(f_music);
+ AOPacketLoadMusicThreading *music_load = new AOPacketLoadMusicThreading(this, f_music, true);
+ QThreadPool::globalInstance()->start(music_load);
}
else
{
@@ -397,11 +378,11 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
}
else
{
- w_courtroom->append_area(f_music);
+ AOPacketLoadMusicThreading *area_load = new AOPacketLoadMusicThreading(this, f_music, false);
+ QThreadPool::globalInstance()->start(area_load);
areas++;
}
}
-
for (int area_n = 0; area_n < areas; area_n++)
{
w_courtroom->arup_append(0, "Unknown", "Unknown", "Unknown");
@@ -410,7 +391,12 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
int total_loading_size = char_list_size * 2 + evidence_list_size + music_list_size;
int loading_value = int(((loaded_chars + generated_chars + loaded_music + loaded_evidence) / static_cast<double>(total_loading_size)) * 100);
w_lobby->set_loading_value(loading_value);
+ if(QThreadPool::globalInstance()->activeThreadCount() == QThreadPool::globalInstance()->maxThreadCount())
+ {
+ QThreadPool::globalInstance()->waitForDone(); //out of order music is bad
+ }
}
+ QThreadPool::globalInstance()->waitForDone();
QString next_packet_number = QString::number(((loaded_music - 1) / 10) + 1);
send_server_packet(new AOPacket("AM#" + next_packet_number + "#%"));
@@ -475,7 +461,8 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
if (musics_time)
{
- w_courtroom->append_music(f_contents.at(n_element));
+ AOPacketLoadMusicThreading *area_load = new AOPacketLoadMusicThreading(this, f_contents.at(n_element), true);
+ QThreadPool::globalInstance()->start(area_load);
}
else
{
@@ -485,7 +472,8 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
}
else
{
- w_courtroom->append_area(f_contents.at(n_element));
+ AOPacketLoadMusicThreading *area_load = new AOPacketLoadMusicThreading(this, f_contents.at(n_element), false);
+ QThreadPool::globalInstance()->start(area_load);
areas++;
}
}
@@ -499,6 +487,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
int loading_value = int(((loaded_chars + generated_chars + loaded_music + loaded_evidence) / static_cast<double>(total_loading_size)) * 100);
w_lobby->set_loading_value(loading_value);
}
+ QThreadPool::globalInstance()->waitForDone();
send_server_packet(new AOPacket("RD#%"));
}