aboutsummaryrefslogtreecommitdiff
path: root/src/networkmanager.h
diff options
context:
space:
mode:
authorTrickyLeifa <date.epoch@gmail.com>2024-05-15 00:00:17 +0200
committerTrickyLeifa <date.epoch@gmail.com>2024-05-15 00:04:16 +0200
commitc9f52b7223685d2e7fca925594171f94dd8c6e3b (patch)
tree740bb32a40da98a4d52836432f59a16b31333900 /src/networkmanager.h
parent951766666621fa77e257e6b5616fe4ab1eb2a52f (diff)
Ported to CMake, ...
* Ported the project to CMake * Android and Mac support dropped for the time being. * Tests, BASS and Discord-RPC are now options * Restructured and reformated the project. * Merged `include` and `src` * Renamed `resource` to `data` * Renamed various files * External libraries headers are no longer included in `src` * Replaced header guards with #pragma once * Multiple refactors (keywords, headers) * Added Qt6 compatibility * Removed various unused functions and headers * Reworked AOPacket * When content is passed to AOPacket, it should be ensured that the content is already decoded. * Encoding/decoding are now static methods. * Fixed various memory leaks * Removed animation code for AOImage * AOImage is always using static images * Simplified ChatLogPiece
Diffstat (limited to 'src/networkmanager.h')
-rw-r--r--src/networkmanager.h72
1 files changed, 72 insertions, 0 deletions
diff --git a/src/networkmanager.h b/src/networkmanager.h
new file mode 100644
index 00000000..984f30f8
--- /dev/null
+++ b/src/networkmanager.h
@@ -0,0 +1,72 @@
+#pragma once
+
+#include "aoapplication.h"
+#include "aopacket.h"
+
+#include <QDnsLookup>
+#include <QNetworkAccessManager>
+#include <QTime>
+#include <QTimer>
+#include <QtWebSockets/QWebSocket>
+
+#include <cstring>
+
+enum MSDocumentType
+{
+ PrivacyPolicy,
+ Motd,
+ ClientVersion
+};
+
+class NetworkManager : public QObject
+{
+ Q_OBJECT
+
+public:
+ explicit NetworkManager(AOApplication *parent);
+ ~NetworkManager() = default;
+
+ void connect_to_server(server_type p_server);
+ void disconnect_from_server();
+
+public Q_SLOTS:
+ void get_server_list();
+ void ship_server_packet(AOPacket p_packet);
+ void join_to_server();
+ void handle_server_packet(const QString &p_data);
+
+ void request_document(MSDocumentType document_type, const std::function<void(QString)> &cb);
+ void send_heartbeat();
+
+Q_SIGNALS:
+ void server_connected(bool state);
+
+private Q_SLOTS:
+ void ms_request_finished(QNetworkReply *reply);
+
+private:
+ AOApplication *ao_app;
+ QNetworkAccessManager *http;
+
+ union
+ {
+ QWebSocket *ws;
+ QTcpSocket *tcp;
+ } server_socket;
+ connection_type active_connection_type;
+ bool connected = false;
+
+ QTimer *heartbeat_timer;
+
+ const QString DEFAULT_MS_BASEURL = "http://servers.aceattorneyonline.com";
+ QString ms_baseurl = DEFAULT_MS_BASEURL;
+
+ const int heartbeat_interval = 60 * 5 * 1000;
+
+ bool partial_packet = false;
+ QString temp_packet;
+
+ unsigned int s_decryptor = 5;
+
+ QString get_user_agent() const { return QStringLiteral("AttorneyOnline/%1 (Desktop)").arg(ao_app->get_version_string()); }
+};