aboutsummaryrefslogtreecommitdiff
path: root/src/networkmanager.cpp
diff options
context:
space:
mode:
authorCrystalwarrior <varsash@gmail.com>2020-05-22 01:18:24 +0300
committerCrystalwarrior <varsash@gmail.com>2020-05-22 01:18:24 +0300
commitc8e12558cdd3fd0769b81679ad09edf1f29b780f (patch)
tree7dae2225e574c3ee55d6b82a1d2f399db4ace5c0 /src/networkmanager.cpp
parentdfac0652c8eb9bd48ceea7ae755e9c2f7e5cb1a2 (diff)
Clang-ify the code with this styling using Visual Studio Code:
{ BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, BreakBeforeBraces: Stroustrup, AllowShortIfStatementsOnASingleLine: false, IndentCaseLabels: false, ColumnLimit: 0, AccessModifierOffset: -4, NamespaceIndentation: All } (this is the Visual Studio preset with only "BreakBeforeBraces" changed from Allman to Stroustrup)
Diffstat (limited to 'src/networkmanager.cpp')
-rw-r--r--src/networkmanager.cpp292
1 files changed, 135 insertions, 157 deletions
diff --git a/src/networkmanager.cpp b/src/networkmanager.cpp
index a9810d4..19f0241 100644
--- a/src/networkmanager.cpp
+++ b/src/networkmanager.cpp
@@ -6,242 +6,220 @@
NetworkManager::NetworkManager(AOApplication *parent) : QObject(parent)
{
- ao_app = parent;
+ ao_app = parent;
- ms_socket = new QTcpSocket(this);
- server_socket = new QTcpSocket(this);
+ ms_socket = new QTcpSocket(this);
+ server_socket = new QTcpSocket(this);
- ms_reconnect_timer = new QTimer(this);
- ms_reconnect_timer->setSingleShot(true);
- QObject::connect(ms_reconnect_timer, SIGNAL(timeout()), this, SLOT(retry_ms_connect()));
+ ms_reconnect_timer = new QTimer(this);
+ ms_reconnect_timer->setSingleShot(true);
+ QObject::connect(ms_reconnect_timer, SIGNAL(timeout()), this, SLOT(retry_ms_connect()));
- QObject::connect(ms_socket, SIGNAL(readyRead()), this, SLOT(handle_ms_packet()));
- QObject::connect(server_socket, SIGNAL(readyRead()), this, SLOT(handle_server_packet()));
- QObject::connect(server_socket, SIGNAL(disconnected()), ao_app, SLOT(server_disconnected()));
+ QObject::connect(ms_socket, SIGNAL(readyRead()), this, SLOT(handle_ms_packet()));
+ QObject::connect(server_socket, SIGNAL(readyRead()), this, SLOT(handle_server_packet()));
+ QObject::connect(server_socket, SIGNAL(disconnected()), ao_app, SLOT(server_disconnected()));
- QString master_config = ao_app->configini->value("master", "").value<QString>();
- if (master_config != "")
- ms_nosrv_hostname = master_config;
+ QString master_config = ao_app->configini->value("master", "").value<QString>();
+ if (master_config != "")
+ ms_nosrv_hostname = master_config;
}
NetworkManager::~NetworkManager()
{
-
}
void NetworkManager::connect_to_master()
{
- ms_socket->close();
- ms_socket->abort();
+ ms_socket->close();
+ ms_socket->abort();
#ifdef MS_FAILOVER_SUPPORTED
- perform_srv_lookup();
+ perform_srv_lookup();
#else
- connect_to_master_nosrv();
+ connect_to_master_nosrv();
#endif
}
void NetworkManager::connect_to_master_nosrv()
{
- QObject::connect(ms_socket, SIGNAL(error(QAbstractSocket::SocketError)),
- this, SLOT(on_ms_socket_error(QAbstractSocket::SocketError)));
+ QObject::connect(ms_socket, SIGNAL(error(QAbstractSocket::SocketError)),
+ this, SLOT(on_ms_socket_error(QAbstractSocket::SocketError)));
- QObject::connect(ms_socket, SIGNAL(connected()),
- this, SLOT(on_ms_nosrv_connect_success()));
- ms_socket->connectToHost(ms_nosrv_hostname, ms_port);
+ QObject::connect(ms_socket, SIGNAL(connected()),
+ this, SLOT(on_ms_nosrv_connect_success()));
+ ms_socket->connectToHost(ms_nosrv_hostname, ms_port);
}
void NetworkManager::connect_to_server(server_type p_server)
{
- server_socket->close();
- server_socket->abort();
+ server_socket->close();
+ server_socket->abort();
- server_socket->connectToHost(p_server.ip, p_server.port);
+ server_socket->connectToHost(p_server.ip, p_server.port);
}
void NetworkManager::ship_ms_packet(QString p_packet)
{
- if (!ms_socket->isOpen())
- {
- retry_ms_connect();
- }
- else
- {
- ms_socket->write(p_packet.toUtf8());
- }
+ if (!ms_socket->isOpen()) {
+ retry_ms_connect();
+ }
+ else {
+ ms_socket->write(p_packet.toUtf8());
+ }
}
void NetworkManager::ship_server_packet(QString p_packet)
{
- server_socket->write(p_packet.toUtf8());
+ server_socket->write(p_packet.toUtf8());
}
void NetworkManager::handle_ms_packet()
{
- QByteArray buffer = ms_socket->readAll();
- QString in_data = QString::fromUtf8(buffer, buffer.size());
-
- if (!in_data.endsWith("%"))
- {
- ms_partial_packet = true;
- ms_temp_packet += in_data;
- return;
- }
-
- else
- {
- if (ms_partial_packet)
- {
- in_data = ms_temp_packet + in_data;
- ms_temp_packet = "";
- ms_partial_packet = false;
+ QByteArray buffer = ms_socket->readAll();
+ QString in_data = QString::fromUtf8(buffer, buffer.size());
+
+ if (!in_data.endsWith("%")) {
+ ms_partial_packet = true;
+ ms_temp_packet += in_data;
+ return;
+ }
+
+ else {
+ if (ms_partial_packet) {
+ in_data = ms_temp_packet + in_data;
+ ms_temp_packet = "";
+ ms_partial_packet = false;
+ }
}
- }
- QStringList packet_list = in_data.split("%", QString::SplitBehavior(QString::SkipEmptyParts));
+ QStringList packet_list = in_data.split("%", QString::SplitBehavior(QString::SkipEmptyParts));
- for (QString packet : packet_list)
- {
- AOPacket *f_packet = new AOPacket(packet);
+ for (QString packet : packet_list) {
+ AOPacket *f_packet = new AOPacket(packet);
- ao_app->ms_packet_received(f_packet);
- }
+ ao_app->ms_packet_received(f_packet);
+ }
}
-
void NetworkManager::perform_srv_lookup()
{
- #ifdef MS_FAILOVER_SUPPORTED
- ms_dns = new QDnsLookup(QDnsLookup::SRV, ms_srv_hostname, this);
+#ifdef MS_FAILOVER_SUPPORTED
+ ms_dns = new QDnsLookup(QDnsLookup::SRV, ms_srv_hostname, this);
- connect(ms_dns, SIGNAL(finished()), this, SLOT(on_srv_lookup()));
- ms_dns->lookup();
- #endif
+ connect(ms_dns, SIGNAL(finished()), this, SLOT(on_srv_lookup()));
+ ms_dns->lookup();
+#endif
}
void NetworkManager::on_srv_lookup()
{
- #ifdef MS_FAILOVER_SUPPORTED
- bool connected = false;
- if (ms_dns->error() != QDnsLookup::NoError)
- {
- qWarning("SRV lookup of the master server DNS failed.");
- ms_dns->deleteLater();
- }
- else
- {
- const auto srv_records = ms_dns->serviceRecords();
-
- for (const QDnsServiceRecord &record : srv_records)
- {
+#ifdef MS_FAILOVER_SUPPORTED
+ bool connected = false;
+ if (ms_dns->error() != QDnsLookup::NoError) {
+ qWarning("SRV lookup of the master server DNS failed.");
+ ms_dns->deleteLater();
+ }
+ else {
+ const auto srv_records = ms_dns->serviceRecords();
+
+ for (const QDnsServiceRecord &record : srv_records) {
#ifdef DEBUG_NETWORK
- qDebug() << "Connecting to " << record.target() << ":" << record.port();
+ qDebug() << "Connecting to " << record.target() << ":" << record.port();
#endif
- ms_socket->connectToHost(record.target(), record.port());
- QTime timer;
- timer.start();
- do
- {
- ao_app->processEvents();
- if (ms_socket->state() == QAbstractSocket::ConnectedState)
- {
- connected = true;
- break;
+ ms_socket->connectToHost(record.target(), record.port());
+ QTime timer;
+ timer.start();
+ do {
+ ao_app->processEvents();
+ if (ms_socket->state() == QAbstractSocket::ConnectedState) {
+ connected = true;
+ break;
+ }
+ else if (ms_socket->state() != QAbstractSocket::ConnectingState && ms_socket->state() != QAbstractSocket::HostLookupState && ms_socket->error() != -1) {
+ qDebug() << ms_socket->error();
+ qWarning() << "Error connecting to master server:" << ms_socket->errorString();
+ ms_socket->abort();
+ ms_socket->close();
+ break;
+ }
+ } while (timer.elapsed() < timeout_milliseconds); // Very expensive spin-wait loop - it will bring CPU to 100%!
+ if (connected) {
+ // Connect a one-shot signal in case the master server disconnects randomly
+ QObject::connect(ms_socket, SIGNAL(error(QAbstractSocket::SocketError)),
+ this, SLOT(on_ms_socket_error(QAbstractSocket::SocketError)));
+ break;
+ }
+ else {
+ ms_socket->abort();
+ ms_socket->close();
+ }
}
- else if (ms_socket->state() != QAbstractSocket::ConnectingState
- && ms_socket->state() != QAbstractSocket::HostLookupState
- && ms_socket->error() != -1)
- {
- qDebug() << ms_socket->error();
- qWarning() << "Error connecting to master server:" << ms_socket->errorString();
- ms_socket->abort();
- ms_socket->close();
- break;
- }
- } while (timer.elapsed() < timeout_milliseconds); // Very expensive spin-wait loop - it will bring CPU to 100%!
- if (connected)
- {
- // Connect a one-shot signal in case the master server disconnects randomly
- QObject::connect(ms_socket, SIGNAL(error(QAbstractSocket::SocketError)),
- this, SLOT(on_ms_socket_error(QAbstractSocket::SocketError)));
- break;
- }
- else
- {
- ms_socket->abort();
- ms_socket->close();
- }
}
- }
- // Failover to non-SRV connection
- if (!connected)
- connect_to_master_nosrv();
- else
- emit ms_connect_finished(connected, false);
- #endif
+ // Failover to non-SRV connection
+ if (!connected)
+ connect_to_master_nosrv();
+ else
+ emit ms_connect_finished(connected, false);
+#endif
}
void NetworkManager::on_ms_nosrv_connect_success()
{
- emit ms_connect_finished(true, false);
+ emit ms_connect_finished(true, false);
- QObject::disconnect(ms_socket, SIGNAL(connected()),
- this, SLOT(on_ms_nosrv_connect_success()));
+ QObject::disconnect(ms_socket, SIGNAL(connected()),
+ this, SLOT(on_ms_nosrv_connect_success()));
- QObject::connect(ms_socket, SIGNAL(error(QAbstractSocket::SocketError)),
- this, SLOT(on_ms_socket_error(QAbstractSocket::SocketError)));
+ QObject::connect(ms_socket, SIGNAL(error(QAbstractSocket::SocketError)),
+ this, SLOT(on_ms_socket_error(QAbstractSocket::SocketError)));
}
void NetworkManager::on_ms_socket_error(QAbstractSocket::SocketError error)
{
- qWarning() << "Master server socket error:" << ms_socket->errorString()
- << "(" << error << ")";
+ qWarning() << "Master server socket error:" << ms_socket->errorString()
+ << "(" << error << ")";
- // Disconnect the one-shot signal - this way, failover connect attempts
- // don't trigger a full retry
- QObject::disconnect(ms_socket, SIGNAL(error(QAbstractSocket::SocketError)),
- this, SLOT(on_ms_socket_error(QAbstractSocket::SocketError)));
+ // Disconnect the one-shot signal - this way, failover connect attempts
+ // don't trigger a full retry
+ QObject::disconnect(ms_socket, SIGNAL(error(QAbstractSocket::SocketError)),
+ this, SLOT(on_ms_socket_error(QAbstractSocket::SocketError)));
- emit ms_connect_finished(false, true);
+ emit ms_connect_finished(false, true);
- ms_reconnect_timer->start(ms_reconnect_delay * 1000);
+ ms_reconnect_timer->start(ms_reconnect_delay * 1000);
}
void NetworkManager::retry_ms_connect()
{
- if (!ms_reconnect_timer->isActive() && ms_socket->state() != QAbstractSocket::ConnectingState)
- connect_to_master();
+ if (!ms_reconnect_timer->isActive() && ms_socket->state() != QAbstractSocket::ConnectingState)
+ connect_to_master();
}
void NetworkManager::handle_server_packet()
{
- QByteArray buffer = server_socket->readAll();
- QString in_data = QString::fromUtf8(buffer, buffer.size());
-
- if (!in_data.endsWith("%"))
- {
- partial_packet = true;
- temp_packet += in_data;
- return;
- }
-
- else
- {
- if (partial_packet)
- {
- in_data = temp_packet + in_data;
- temp_packet = "";
- partial_packet = false;
+ QByteArray buffer = server_socket->readAll();
+ QString in_data = QString::fromUtf8(buffer, buffer.size());
+
+ if (!in_data.endsWith("%")) {
+ partial_packet = true;
+ temp_packet += in_data;
+ return;
}
- }
- QStringList packet_list = in_data.split("%", QString::SplitBehavior(QString::SkipEmptyParts));
+ else {
+ if (partial_packet) {
+ in_data = temp_packet + in_data;
+ temp_packet = "";
+ partial_packet = false;
+ }
+ }
- for (QString packet : packet_list)
- {
- AOPacket *f_packet = new AOPacket(packet);
+ QStringList packet_list = in_data.split("%", QString::SplitBehavior(QString::SkipEmptyParts));
- ao_app->server_packet_received(f_packet);
- }
+ for (QString packet : packet_list) {
+ AOPacket *f_packet = new AOPacket(packet);
+
+ ao_app->server_packet_received(f_packet);
+ }
}