50 lines
1.4 KiB
C++
50 lines
1.4 KiB
C++
//
|
|
// Created by selim on 03.01.2022.
|
|
//
|
|
|
|
#include "Api.h"
|
|
#include <memory>
|
|
|
|
template<class...Args>
|
|
struct callback {
|
|
void(*function)(Args..., void*) = nullptr;
|
|
std::unique_ptr<void, void(*)(void*)> state;
|
|
};
|
|
|
|
template<typename... Args, typename Lambda>
|
|
callback<Args...> voidify(Lambda&& l) {
|
|
using Func = typename std::decay<Lambda>::type;
|
|
std::unique_ptr<void, void(*)(void*)> data(
|
|
new Func(std::forward<Lambda>(l)),
|
|
+[](void* ptr){
|
|
std::cout << "!!!!!!!!!!!!!!!!! Deleting data" << std::endl;
|
|
delete (Func*)ptr;
|
|
}
|
|
);
|
|
return {
|
|
+[](Args... args, void* v)->void {
|
|
Func* f = static_cast< Func* >(v);
|
|
(*f)(std::forward<Args>(args)...);
|
|
},
|
|
std::move(data)
|
|
};
|
|
}
|
|
|
|
const std::string Api::_baseUrl = "https://vps.aliencat.pro:8443/";
|
|
SoupSession* Api::_session = soup_session_new();
|
|
|
|
Task<User> Api::login(std::string email, std::string password) {
|
|
std::string url = _baseUrl + "user/login";
|
|
auto msg = soup_message_new(SOUP_METHOD_POST, url.c_str());
|
|
|
|
auto task = Task<User>();
|
|
|
|
auto callback = voidify<SoupSession*, SoupMessage*>([&](SoupSession* session, SoupMessage* message) {
|
|
std::cout << "Callback called" << std::endl;
|
|
task.set_result(User("qwe", "asdf"));
|
|
});
|
|
soup_session_queue_message(_session, msg, callback.function, callback.state.get());
|
|
|
|
return task;
|
|
}
|