improved DC handling and added case insensitivity to char.ini checks

This commit is contained in:
David Skoland 2017-02-23 16:53:15 +01:00
parent f769741c1d
commit 23262512ac
4 changed files with 33 additions and 10 deletions

View File

@ -19,6 +19,8 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
keepalive_timer = new QTimer(this); keepalive_timer = new QTimer(this);
keepalive_timer->start(60000); keepalive_timer->start(60000);
disconnect_timer = new QTimer(this);
disconnect_timer->setSingleShot(true);
chat_tick_timer = new QTimer(this); chat_tick_timer = new QTimer(this);
@ -300,6 +302,8 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
connect(ui_spectator, SIGNAL(clicked()), this, SLOT(on_spectator_clicked())); connect(ui_spectator, SIGNAL(clicked()), this, SLOT(on_spectator_clicked()));
connect(disconnect_timer, SIGNAL(timeout()), this, SLOT(connection_timeout()));
set_widgets(); set_widgets();
construct_evidence(); construct_evidence();
@ -1323,7 +1327,7 @@ void Courtroom::chat_tick()
QScrollBar *scroll = ui_vp_message->verticalScrollBar(); QScrollBar *scroll = ui_vp_message->verticalScrollBar();
scroll->setValue(scroll->maximum()); scroll->setValue(scroll->maximum());
scroll->hide(); //scroll->hide();
if (f_message.at(tick_pos) != ' ') if (f_message.at(tick_pos) != ' ')
{ {
@ -1985,6 +1989,19 @@ void Courtroom::char_clicked(int n_char)
void Courtroom::ping_server() void Courtroom::ping_server()
{ {
ao_app->send_server_packet(new AOPacket("CH#" + QString::number(m_cid) + "#%")); ao_app->send_server_packet(new AOPacket("CH#" + QString::number(m_cid) + "#%"));
disconnect_timer->start(10000);
}
void Courtroom::check_connection_received()
{
disconnect_timer->stop();
}
void Courtroom::connection_timeout()
{
call_notice("Disconnected from server.");
ao_app->construct_lobby();
ao_app->destruct_courtroom();
} }
Courtroom::~Courtroom() Courtroom::~Courtroom()

View File

@ -92,6 +92,8 @@ public:
void handle_wtce(QString p_wtce); void handle_wtce(QString p_wtce);
void set_hp_bar(int p_bar, int p_state); void set_hp_bar(int p_bar, int p_state);
void check_connection_received();
~Courtroom(); ~Courtroom();
private: private:
@ -115,6 +117,9 @@ private:
//triggers ping_server() every 60 seconds //triggers ping_server() every 60 seconds
QTimer *keepalive_timer; QTimer *keepalive_timer;
//how long we wait for the server to respond on a ping
QTimer *disconnect_timer;
//determines how fast messages tick onto screen //determines how fast messages tick onto screen
QTimer *chat_tick_timer; QTimer *chat_tick_timer;
int chat_tick_interval = 60; int chat_tick_interval = 60;
@ -317,6 +322,8 @@ private:
void construct_evidence(); void construct_evidence();
void set_evidence_page(); void set_evidence_page();
public slots: public slots:
void objection_done(); void objection_done();
void preanim_done(); void preanim_done();
@ -406,6 +413,7 @@ private slots:
void char_clicked(int n_char); void char_clicked(int n_char);
void ping_server(); void ping_server();
void connection_timeout();
}; };

View File

@ -520,9 +520,10 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
if (courtroom_constructed && f_contents.size() > 0) if (courtroom_constructed && f_contents.size() > 0)
w_courtroom->mod_called(f_contents.at(0)); w_courtroom->mod_called(f_contents.at(0));
} }
else if (header == "checkconnection") else if (header == "checkconnection" || header == "CHECK")
{ {
send_server_packet(new AOPacket("CH#" + QString::number(w_courtroom->get_cid()) + "#%")); if (courtroom_constructed)
w_courtroom->check_connection_received();
} }
end: end:

View File

@ -224,30 +224,27 @@ QString AOApplication::read_char_ini(QString p_char, QString p_search_line, QStr
QTextStream in(&char_ini); QTextStream in(&char_ini);
//because there are char inis that look like [eMoTIonS] for whatever reason
target_tag = target_tag.toLower();
terminator_tag = terminator_tag.toLower();
bool tag_found = false; bool tag_found = false;
while(!in.atEnd()) while(!in.atEnd())
{ {
QString line = in.readLine(); QString line = in.readLine();
if (line.toLower().startsWith(terminator_tag)) if (QString::compare(line, terminator_tag, Qt::CaseInsensitive) == 0)
break; break;
if (line.toLower().startsWith(target_tag)) if (line.startsWith(target_tag, Qt::CaseInsensitive))
{ {
tag_found = true; tag_found = true;
continue; continue;
} }
if (!line.startsWith(p_search_line)) if (!line.startsWith(p_search_line, Qt::CaseInsensitive))
continue; continue;
QStringList line_elements = line.split("="); QStringList line_elements = line.split("=");
if (line_elements.at(0).trimmed() != p_search_line) if (QString::compare(line_elements.at(0).trimmed(), p_search_line, Qt::CaseInsensitive) != 0)
continue; continue;
if (line_elements.size() < 2) if (line_elements.size() < 2)