comparison include/core/http.h @ 291:9a88e1725fd2

*: refactor lots of stuff I forgot to put this into different commits, oops! anyway, it doesn't really matter *that* much since this is an unfinished hobby project anyway. once it starts getting stable commit history will be more important, but for now it's not that big of a deal
author Paper <paper@paper.us.eu.org>
date Sun, 12 May 2024 16:31:07 -0400
parents 3ec7804abf17
children b1f625b0227c
comparison
equal deleted inserted replaced
290:9347e2eaf6e5 291:9a88e1725fd2
1 #ifndef MINORI_CORE_HTTP_H_ 1 #ifndef MINORI_CORE_HTTP_H_
2 #define MINORI_CORE_HTTP_H_ 2 #define MINORI_CORE_HTTP_H_
3 3
4 #include <QByteArray> 4 #include <QByteArray>
5 #include <QThread> 5 #include <QThread>
6
6 #include <string> 7 #include <string>
7 #include <vector> 8 #include <vector>
9 #include <mutex>
8 10
9 namespace HTTP { 11 namespace HTTP {
10 12
11 QByteArray Get(const std::string& url, const std::vector<std::string>& headers = {}); 13 enum class Type {
12 QByteArray Post(const std::string& url, const std::string& data, const std::vector<std::string>& headers = {}); 14 Get,
15 Post
16 };
13 17
14 class GetThread : public QThread { 18 QByteArray Request(const std::string& url, const std::vector<std::string>& headers = {}, const std::string& data = "", Type type = Type::Get);
19
20 class RequestThread final : public QThread {
15 Q_OBJECT 21 Q_OBJECT
16 22
17 public: 23 public:
18 GetThread(const std::string& u, const std::vector<std::string>& h = {}, QObject* parent = nullptr) 24 RequestThread(Type type = Type::Get, QObject* parent = nullptr);
19 : QThread(parent) { 25 RequestThread(const std::string& url, const std::vector<std::string>& headers = {},
20 url = u; 26 const std::string& data = "", Type type = Type::Get, QObject* parent = nullptr);
21 headers = h; 27 ~RequestThread();
22 } 28
29 void SetUrl(const std::string& url);
30 void SetHeaders(const std::vector<std::string>& headers);
31 void SetData(const std::string& data);
32 void SetType(Type type);
33
34 void Stop();
23 35
24 signals: 36 signals:
25 void ReceivedData(const QByteArray& ba); 37 void ReceivedData(const QByteArray& ba);
26 38
27 protected: 39 protected:
28 void run() override { emit ReceivedData(Get(url, headers)); } 40 void run() override;
41 static size_t WriteCallback(void* contents, size_t size, size_t nmemb, void* userdata);
29 42
30 std::string url; 43 std::string url_;
31 std::vector<std::string> headers; 44 std::string data_;
32 }; 45 std::vector<std::string> headers_;
46 Type type_;
33 47
34 class PostThread : public QThread { 48 /* these are passed to the write callback */
35 Q_OBJECT 49 QByteArray array_;
50 bool cancelled_ = false;
36 51
37 public: 52 /* don't fuck this up */
38 PostThread(const std::string& u, const std::string& d, const std::vector<std::string>& h = {}, 53 std::mutex callback_data_mutex_;
39 QObject* parent = nullptr)
40 : QThread(parent) {
41 url = u;
42 data = d;
43 headers = h;
44 }
45
46 signals:
47 void ReceivedData(const QByteArray& ba);
48
49 protected:
50 void run() override { emit ReceivedData(Post(url, data, headers)); }
51
52 std::string url;
53 std::string data;
54 std::vector<std::string> headers;
55 }; 54 };
56 55
57 } // namespace HTTP 56 } // namespace HTTP
58 57
59 #endif // MINORI_CORE_HTTP_H_ 58 #endif // MINORI_CORE_HTTP_H_