summaryrefslogtreecommitdiff
path: root/discord/http.hpp
blob: b664c864f7b355f459d25236397de7de3463effa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#pragma once
#include <cpr/cpr.h>
#include <functional>
#include <future>
#include <string>
#include <unordered_map>
#include <memory>
#include <mutex>
#include <queue>
#include <glibmm.h>

class HTTPClient {
public:
    HTTPClient(std::string api_base);

    void SetUserAgent(std::string agent);
    void SetAuth(std::string auth);
    void MakeDELETE(std::string path, std::function<void(cpr::Response r)> cb);
    void MakeGET(std::string path, std::function<void(cpr::Response r)> cb);
    void MakePATCH(std::string path, std::string payload, std::function<void(cpr::Response r)> cb);
    void MakePOST(std::string path, std::string payload, std::function<void(cpr::Response r)> cb);
    void MakePUT(std::string path, std::string payload, std::function<void(cpr::Response r)> cb);

private:
    void OnResponse(cpr::Response r, std::function<void(cpr::Response r)> cb);
    void CleanupFutures();

    mutable std::mutex m_mutex;
    Glib::Dispatcher m_dispatcher;
    std::queue<std::function<void()>> m_queue;
    void RunCallbacks();

    std::vector<std::future<void>> m_futures;
    std::string m_api_base;
    std::string m_authorization;
    std::string m_agent;
};