aboutsummaryrefslogtreecommitdiff
path: root/include/networkmanager.h
diff options
context:
space:
mode:
authoroldmud0 <oldmud0@users.noreply.github.com>2019-01-02 09:40:38 -0600
committerGitHub <noreply@github.com>2019-01-02 09:40:38 -0600
commit4d93f059c01664ad074cf467e79a63b85e86beb0 (patch)
tree57b8a9760796937e66e393b3bc00f4bee4337bdf /include/networkmanager.h
parent6f1bce5882676ea7affe717a2f5a00b8c3b7fe12 (diff)
parentec1057b5d7e1d39963275bc2cbd79a53cf6f3f5c (diff)
Merge pull request #54 from OmniTroid/master
Restructuring + better cross-platform support
Diffstat (limited to 'include/networkmanager.h')
-rw-r--r--include/networkmanager.h86
1 files changed, 86 insertions, 0 deletions
diff --git a/include/networkmanager.h b/include/networkmanager.h
new file mode 100644
index 0000000..e28abfd
--- /dev/null
+++ b/include/networkmanager.h
@@ -0,0 +1,86 @@
+#ifndef NETWORKMANAGER_H
+#define NETWORKMANAGER_H
+
+// Qt for Android has stubbed QDnsLookup. This is not documented in any part of their wiki.
+// This prevents SRV lookup/failover behavior from functioning.
+// https://bugreports.qt.io/browse/QTBUG-56143
+#ifndef ANDROID
+#define MS_FAILOVER_SUPPORTED
+#endif
+
+//#define LOCAL_MS
+
+#ifdef LOCAL_MS
+#undef MS_FAILOVER_SUPPORTED
+#endif
+
+#include "aopacket.h"
+#include "aoapplication.h"
+
+#include <QTcpSocket>
+#include <QDnsLookup>
+#include <QTime>
+#include <QTimer>
+#include <cstring>
+
+class NetworkManager : public QObject
+{
+ Q_OBJECT
+
+public:
+ NetworkManager(AOApplication *parent);
+ ~NetworkManager();
+
+ AOApplication *ao_app;
+ QTcpSocket *ms_socket;
+ QTcpSocket *server_socket;
+ QDnsLookup *ms_dns;
+ QTimer *ms_reconnect_timer;
+
+ const QString ms_srv_hostname = "_aoms._tcp.aceattorneyonline.com";
+#ifdef LOCAL_MS
+ QString ms_nosrv_hostname = "localhost";
+#else
+ QString ms_nosrv_hostname = "master.aceattorneyonline.com";
+#endif
+
+ const int ms_port = 27016;
+ const int timeout_milliseconds = 2000;
+
+ const int ms_reconnect_delay_ms = 7000;
+
+ // kind of arbitrary max buffer size
+ const size_t buffer_max_size = 16384;
+
+ bool ms_partial_packet = false;
+ QString ms_temp_packet = "";
+
+ bool partial_packet = false;
+ QString temp_packet = "";
+
+ unsigned int s_decryptor = 5;
+
+ void connect_to_master();
+ void connect_to_master_nosrv();
+ void connect_to_server(server_type p_server);
+
+public slots:
+ void ship_ms_packet(QString p_packet);
+ void ship_server_packet(QString p_packet);
+
+signals:
+ void ms_connect_finished(bool success, bool will_retry);
+
+private:
+ void perform_srv_lookup();
+
+private slots:
+ void on_srv_lookup();
+ void handle_ms_packet();
+ void handle_server_packet();
+ void on_ms_nosrv_connect_success();
+ void on_ms_socket_error(QAbstractSocket::SocketError error);
+ void retry_ms_connect();
+};
+
+#endif // NETWORKMANAGER_H